Viele Bereiche mit VBA und verbundenen Zellen selektieren

07/03/2009 - 14:00 von Andreas Killer | Report spam
Hallo!

Ich markiere die Eingabezellen von Kalkulationen für User gerne
farbig, entferne zum Schluß den Schutz dieser Zellen und schütze das
Tabellenblatt wenn's fertig ist, damit mir keiner 'ne Formel löscht.

Um die Arbeit zu erleichtern hatte ich mir unlàngst ein AddIn
geschrieben welches mir alle Zellen mit gleichen Eigenschaften
selektiert, also z.B. alle Zellen die nicht gesperrt sind oder die mit
der gleichen Hintergrundfarbe, etc.

Dabei füge ich wàhrend des Suchens alle gefundenen Zellen via Union
zusammen und sage hinterher einfach .Select auf diesen Bereich.

Das funktioniert wunderbar, es sei denn eine der gefundenen Zellen ist
verbunden *und* eine (oder mehrere) einzelne Zellen grenzen an diese
verbundenen Zellen an. In diesem Fall selektiert das .Select den
Bereich komplett in der Art wie .CurrentRegion (wenn die Zellen
Inhalte hàtten).

Ein Beispiel:

Sub Markieren()
Dim R As Range, Alles As Range

Set R = Range("A1")
GoSub Hinzufügen
Set R = Range("B1")
GoSub Hinzufügen
Set R = Range("C1")
GoSub Hinzufügen
Alles.Select
Exit Sub

Hinzufügen:
If Alles Is Nothing Then
Set Alles = R
Else
Set Alles = Union(Alles, R)
End If
Return
End Sub

Wenn man das laufen làßt, dann werden ganz wunderbar die Zellen von A1
bis C1 markiert. Verbindet man aber nun die Zellen B1 bis B3, dann
selektiert die sub den Bereich A1:C3 komplett!

Ändere ich Set R = Range("B1") zu Set R = Range("B2") dann wird
A1,B1:B3,C1 selektiert, was korrekt wàre.

Ändere ich Set R = Range("C1") zu Set R = Range("C2") dann wird
A1:B3,C2 selektiert, was auch falsch ist.

Hat jemand eine Idee wie man das den Bereich A1,B1:B3,C1 via VBA bei
verbundenem Bereich B1:B3 selektieren kann?

Die Zellen einzeln zu selektieren ala Range(R, Selection).Select
bringt das gleiche falsche Ergebnis.

Die Adressen der einzelnen Zellen als String (S="":S=S&R.Address) zu
holen und dann am Ende Range(S).Select zu sagen funktioniert nicht,
weil man an Range nur einen String mit max. 255 Zeichen übergeben
kann, das reicht nicht!

Andreas.
 

Lesen sie die antworten

#1 Thomas Ramel
07/03/2009 - 16:31 | Warnen spam
Grüezi Andreas

Andreas Killer schrieb am 07.03.2009

Um die Arbeit zu erleichtern hatte ich mir unlàngst ein AddIn
geschrieben welches mir alle Zellen mit gleichen Eigenschaften
selektiert, also z.B. alle Zellen die nicht gesperrt sind oder die mit
der gleichen Hintergrundfarbe, etc.

Dabei füge ich wàhrend des Suchens alle gefundenen Zellen via Union
zusammen und sage hinterher einfach .Select auf diesen Bereich.

Das funktioniert wunderbar, es sei denn eine der gefundenen Zellen ist
verbunden *und* eine (oder mehrere) einzelne Zellen grenzen an diese
verbundenen Zellen an. In diesem Fall selektiert das .Select den
Bereich komplett in der Art wie .CurrentRegion (wenn die Zellen
Inhalte hàtten).



Ja, dann werden die Automatismen von Excel wach und fügen den Bereich als
rechteckigen Bereich zusammen, der die maximale Ausdehnung der am weitesten
auseinander liegenden Zellen hat.

Sub Markieren()
Dim R As Range, Alles As Range

Set R = Range("A1")
GoSub Hinzufügen
Set R = Range("B1")
GoSub Hinzufügen
Set R = Range("C1")
GoSub Hinzufügen
Alles.Select
Exit Sub

Hinzufügen:
If Alles Is Nothing Then
Set Alles = R
Else
Set Alles = Union(Alles, R)
End If
Return
End Sub

Wenn man das laufen làßt, dann werden ganz wunderbar die Zellen von A1
bis C1 markiert. Verbindet man aber nun die Zellen B1 bis B3, dann
selektiert die sub den Bereich A1:C3 komplett!

Hat jemand eine Idee wie man das den Bereich A1,B1:B3,C1 via VBA bei
verbundenem Bereich B1:B3 selektieren kann?



Passe den letzten Abschnitt mal wie folgt an, dann müsste es mit allen
Variationen klappen:


If Alles Is Nothing Then
Set Alles = R.MergeArea
Else
Set Alles = Union(Alles, R.MergeArea)
End If



Mit freundlichen Grüssen
Thomas Ramel

- MVP für Microsoft-Excel -
[Vista Ultimate SP-1 / xl2007 SP-1]

Ähnliche fragen