CurrentSelection sagt mir ja schon der Name. Nämlich der gerade markierte Bereich.
Nein, die gegenwärtige
Markierung.
Das können Zellen ODER Zellbereiche sein und die müssen nicht zusammenhängend sein. Das Makro was ich gepostet habe funktioniert nur für EINEN GESCHLOSSENEN (zusammenhängenden) Zellbereich, sonst müßte man eine Prüfung einbauen. Ist nur eine Zelle markiert, ist das sowohl eine Zelle als auch ein Zellbereich (Sonderfall) aber allgemein mußt Du zwischen Zellen und Zellbereichen unterscheiden. (Ganz strenggenommen handelt es sich wirklich nur um die gegenwärtige Auswahl, das kann dann auch eine Grafik oder ein Teil des Zelleninhalts usw. sein.)
Was ist aber ThisComponent?
Das ist im Prinzip 'das Dokument welches gerade den Fokus besitzt', hier das spezielle Tabellenblatt der Datei. Da tatsächlich ein Zellbereich markiert ist ist das auch eindeutig, wäre keiner markiert könntest Du mit z.B. ThisComponent.Sheets(0).GetCellByPosition(0,0) auf die Zelle A1 des ersten Tabellenblattes der aktuellen Datei zugreifen auch wenn diese Zelle nicht markiert wäre (geht auch mit Namen der Tabelle und Zelle und Zellbereichen).
Werden hier die markierten Zellen gezählt? Wegen dem Count.
Ja, hier werden getrennt die Werte für die Anzahl der Zeilen und Spalten des markierten Bereichs gezählt. Das geht so nur weil ich vorraussetzte das die Markierung tatsächlich ein Bereich ist (s.o.).
Hier wird dann wohl das A in die Zellen eingefügt.
Ja, geht so aber nur weil "A" ein String ist, für Zahl hieße das .Value = für Formel .Formula =
Ist das eine Art Shiftfunktion wie shift in der Bash unter Linux?
Ich weiß über Bash/Kommandozeile unter Linux zu wenig, ich vermute aber nein. Das Ganze ist eine Verschachtelung von For-Next-Schleifen bzw.
Sprich: Wenn Zelle 1 bearbeitet wurde, mach mit Zelle 2 weiter. Oder?
in diesem Sinne irgendwie schon.
Beispiel, wenn die Zellen A1,A2,B1,B2 als Bereich markiert sind:
Code: Alles auswählen
(1)For x = 0 To auswahl.Columns.getCount-1
(2) For y = 0 To auswahl.Rows.getCount-1
(3) auswahl.getCellByPosition(x, y).string = "A"
(4) Next y
(5)Next x
so wird das abgearbeitet:
-(1) --> x=0 (Obergrenze(*) noch nicht überschritten), deshalb
-(2) --> y=0 (Obergrenze noch nicht überschritten), deshalb
-(3) --> in Zelle mit Koordinaten (0,0) "A" eintragen (Koordinaten beziehen sich hier auf den markierten Bereich und nicht auf die gesamte Tabelle)
-(4) --> y=1
-(2) --> Obergrenze noch nicht überschritten, deshalb
-(3) --> in Zelle mit Koordinaten (0,1) "A" eintragen
-(4) --> y=2
-(2) --> Obergrenze überschritten, deshalb diese Schleife verlassen
-(5) --> x=1
-(1) --> Obergrenze noch nicht überschritten, deshalb
-(2) --> y=0
-(3) --> in Zelle mit Koordinaten (1,0) "A" eintragen
-(4) --> y=1
-(2) --> Obergrenze noch nicht überschritten, deshalb
-(3) --> in Zelle mit Koordinaten (1,1) "A" eintragen
-(4) --> y=2
-(2) --> Obergrenze überschritten, deshalb diese Schleife verlassen
-(5) --> x=2
-(1) --> Obergrenze überschritten, deshalb diese Schleife verlassen
(*)Obergrenze ist Anzahl der Zeilen minus 1 bzw. Spalten minus 1
Gruß
Stephan