Antwort u. Beispiele
07.08.2020 06:13:30
Werner
Hallo,
benötigt wird diese With "Klammer" nicht.
Man könnte auch sagen: "Hat was mit Bequemlichkeit zu tun."
Um in einem Code ein Range-Objekt korrekt zu referenzieren muss vor jedem Range-Objekt (Range, Cells, Rows...) zwingend auch das Tabellenblatt angegeben werden, auf dem sich die Range befindet.
Ausnahme: Du sprichst eine Range an, die sich auf dem gerade aktiven Tabellenblatt befindet, dann kann das Tabellenblatt vor den Range-Objekten entfallen.
Verwendest du dagegen ein With... End With, dann werden die Range-Objekte (Range, Cells, Rows...) auf das im With angegebene Blatt referenziert, indem vor jedem Range-Objekt ein Punkt angefügt wird (.Range, .Cells, .Rows...).
Man spart sich also ständig das Tabellenblatt vor das Range-Objekt zu schreiben.
Die angefügten Makros machen alle das gleiche. Sie färben den Bereich A1:E1 gelb und schreiben einen Text in den Bereich A1:E1.
Ohne With musst du insgesamt 6 mal das Blatt in den Code schreiben um korrekt zu referenzieren.
Schau dir dann dazu im Vergleich mal das zweite Makro mit der With... End With "Klammer" an.
Dadurch, dass in diesen beiden Makros die Range explizit auf ein bestimmtes Blatt referenziert ist, kannst du die auch von einem anderen Blatt aus ausführen. Ausgeführt wird der Code im referenzierten Blatt. Du kannst diese Makros also auch von Blatt2 ausführen, ausgeführt werden sie im Blatt1.
Das Makro ohne angabe eines Blattes vor den Range-Objekten wird immer im gerade aktien Blatt ausgeführt.
Public Sub ohne_With()
Worksheets("Tabelle1").Range(Worksheets("Tabelle1").Cells(1, "A"), _
Worksheets("Tabelle1").Cells(1, "E")).Interior.Color = vbYellow
Worksheets("Tabelle1").Range(Worksheets("Tabelle1").Cells(1, "A"), _
Worksheets("Tabelle1").Cells(1, "E")) = "Hallo Thomas"
End Sub
Public Sub mit_With()
With Worksheets("Tabelle1")
.Range(.Cells(1, "A"), .Cells(1, "E")).Interior.Color = vbYellow
.Range(.Cells(1, "A"), .Cells(1, "E")) = "Hallo Thomas"
End With
End Sub
Public Sub aktives_Blatt()
Range(Cells(1, "A"), Cells(1, "E")).Interior.Color = vbYellow
Range(Cells(1, "A"), Cells(1, "E")) = "Hallo Thomas"
End Sub
Gruß Werner