der Bereich B10:G40 ist markiert(selektiert).
Wie kann ich nun die Selektion umkehren, so, dass der Bereich B10:G40 nicht mehr
selektiert ist, aber dafür alle anderen Zellen, die vorher nicht markiert waren?
mfg Jochen
Sub SelectionInvertieren()
Dim Bereich As Range, wks As Worksheet, BereichNeu As Range
Dim lastRow As Long, lastColumn As Integer
Set wks = ActiveSheet
Set Bereich = Selection
With wks
lastRow = .Cells.SpecialCells(xlCellTypeLastCell).Row
lastColumn = .Cells.SpecialCells(xlCellTypeLastCell).Column
If Bereich.Column > 1 Then
Set BereichNeu = .Range(.Cells(1, 1), .Cells(lastRow, Bereich.Column - 1))
End If
If Bereich.Column + Bereich.Columns.Count - 1 1 Then
If BereichNeu Is Nothing Then
Set BereichNeu = .Range(.Cells(1, Bereich.Column), _
.Cells(Bereich.Row - 1, Bereich.Column + Bereich.Columns.Count - 1))
Else
Set BereichNeu = Application.Union(BereichNeu, .Range(.Cells(1, Bereich.Column), _
.Cells(Bereich.Row - 1, Bereich.Column + Bereich.Columns.Count - 1)))
End If
End If
If Bereich.Row + Bereich.Rows.Count - 1
lastRow = .Rows.Count
lastColumn = .Columns.Count
Allerdings frage ich mich jetzt noch mehr als vorher, was der Sinn einer solchen Selektions-Umkehr sein soll.
Gruß
Franz
Option Explicit
Dim rngGesamtbereich As Range
Sub Gesamtbereich_definieren()
Set rngGesamtbereich = Selection
End Sub
Sub Selection_invertieren()
Dim rngSelectionAlt As Range
Dim rngSelectionNeu as Range
Dim Zelle As Range
'set Gesamtbereich = Range(...) 'Diese Zeile Verwenden, wenn der Gesamtbereich immer gleich _
ist.
' Das Makro Gesamtbereich definieren kann dann entfallen, _
der folgende IF-Block auch.
If rngGesamtbereich Is Nothing Then
MsgBox "Es ist kein Gesamtbereich definiert, bitte selektieren Sie den Gesamtbereich _
und führen sie das Makro ""Gesamtbereich_definieren"" aus."
Exit Sub
End If
Set rngSelectionAlt = Selection
For Each Zelle In rngGesamtbereich
If Intersect(Zelle, rngSelectionAlt) Is Nothing Then
Set rngSelectionNeu = Zelle
Exit For
End If
Next
For Each Zelle In rngGesamtbereich
If Intersect(Zelle, rngSelectionAlt) Is Nothing Then Set rngSelectionNeu = Union( _
rngSelectionNeu, Zelle)
Next
If Not rngSelectionNeu Is Nothing Then rngSelectionNeu.Select
End Sub
es sind 2 Makros, das erste legt den Gesamtbereich fest, auf den sich die Umkehr beziehen soll.
Dazu den Gesamtbereich markieren und das Makro starten.
Erst danach kann mit der Selektions-Umkehr gearbeitet werden.
Ist der Gesamtbereich immer gleich, kann die Definition natürlich direkt ins Hauptmakro übernommen werden.
gruß, Daniel