Hi
der Punkt ist immer ein Platzhalter und dient einfach nur dazu, Code kürzer und übersichtlicher zu schreiben.
immer wenn du den Punkt irgendwo am Anfang eines Ausdrucks siehst, dann muss irgendwo vorher eine Zeile mit
WITH Objekt stehen.
gedanklich musst du dann immer dieses Objekt dort einsetzen, wo der Ausdruck mit dem Punkt beginnt.
du machst das ja implizit schon über Select/Selection, denn wenn du das TextINSpalten mit der Spalte G ausführen willst, dann selektierst du sie zuerst und wendest dann das TextInSpalten auf diese an:
Columns("G:G").Select
Selection.TextToColumns
Eigentlich ist damit das gemeint, das Selection steht nur da, weil der Recorder das so aufzeichnet, da wir mit der Maus so arbeiten müssen, denn wir können immer nur eine Sache auswählen, daher wählen wir zuerst das Objekt aus, mit dem wir etwas machen möchten und danach erst den Befehl, den wir auf das Objekt anwenden wollen.
In VBA kann man das in einem Schritt machen:
Columns("G:G").TextToColumns
Punkt und WITH arbeiten jetzt so ähnlich, dh man definiert sich mit dem WITH ein Objekt und wendet dann darauf die Befehle an:
With Columns("G:G")
.TextToColumns
der Vorteil ist, dass man sich hier Schreibarbeit spart, wenn man dieses Objekt nicht nur einmal verwenden möchte, sondern mehrere Aktionen mit diesem Objekt ausführen will, beispielsweise sowas:
With Columns("G:G")
.TextToColumns
.Font.Size = 10
.ColumnWidth = 20
.Interior.Color = vbRed
End with
das ist kürzer und übersichtlicher als
Columns("G:G").TextToColumns
Columns("G:G").Font.Size = 10
Columns("G:G").ColumnWidth = 20
Columns("G:G").Interior.Color = vbRed
und wenn du mal irgendwann aus Spalte G die Spalten F machen willst, musst du den code nur einmal ändern und nicht an mehreren Stellen, das senkt das Risiko, dass du eine Stelle vergisst
insbesondere beim TextToColumns hat das einen interessanten Effekt:
man muss ja die Zielzelle angeben, ab welcher die neuen Texte eingefügt werden:
Columns("G:G").Select
Selection.TextToColumns Destination:=Range("G1"),
wenn man dieses Range("G1") in Abhängigkeit von Spalte G beschreibt, so ist G1 immer die erste Spalte und erste Zeile der Spalte G, dh Columns("G:G").Cells(1, 1) ist das gleiche wie Range("G1").
wenn man das jetzt mit der WITH-Klammer schreibt:
With Columns("G:G")
.TextToColumns Destinatinon:= .Cells(1, 1)
so ist das das gleiche wie
Columns("G:G").TextToColumns Destination:=Range("G1")
,
aber wenn man jetzt das ganze nach Spalte F verschieben will, muss man eben nur in der WITH-Klammer die Änderung durchführen und nicht bei der Destination.
Gruß Daniel