❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱


❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

VBA 3 Zellen kopieren und verbinden. Schleifendurchlauf?

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
Kutte
Beiträge: 1
Registriert: Mo 7. Jul 2014, 22:57

VBA 3 Zellen kopieren und verbinden. Schleifendurchlauf?

Beitrag von Kutte » Mo 7. Jul 2014, 23:43

Hallo Zusammen,

ich möchte folgenden Ablauf in einem Makro automatisieren:

Spalten "L" "K" und "I" enthalten Adressangaben und sollen in einer neuer Spalte, nach dem Schema: Straße (Leerzeichen) Hausnummer (Leerzeichen) Zusatz, zuammengefasst werden.
Im ersten Schritt kopiere ich die Spalten samt Inhalt an das Ende der Tabelle (Beispiel, klappt auch soweit) :

oSheet = ThisComponent.Sheets(1)
oRangeAddress1 = oSheet.getCellRangeByName("L1:L10").getRangeAddress()
oCellAddress1 = oSheet.getCellByPosition(49, 1).getCellAddress()
oSheet.copyRange(oCellAddress1, oRangeAddress1)
oSheet = ThisComponent.Sheets(1)
oRangeAddress2 = oSheet.getCellRangeByName("K1:K10").getRangeAddress()
oCellAddress2 = oSheet.getCellByPosition(50, 1).getCellAddress()
oSheet.copyRange(oCellAddress2, oRangeAddress2)
oSheet = ThisComponent.Sheets(1)
oRangeAddress3 = oSheet.getCellRangeByName("I1:I10").getRangeAddress()
oCellAddress3 = oSheet.getCellByPosition(51, 1).getCellAddress()
oSheet.copyRange(oCellAddress3, oRangeAddress3)

Hier gebe ich allerdings den Bereich 'range' explizit an. Besser wäre hier eine Abruchbedingung, z.B. 'letzte Zeile'.
>>>>>>>>>>>>>>>>>>>
Die Funktion "verbinden" habe ich per Makro aufgezeichnet und funktioniert auch für die erste Zeile.

sub Main
rem ----------------------------------------------------------------------
rem define variables
dim i
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document


document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$AX$2:$AZ$2"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "MoveContents"
args2(0).Value = true

dispatcher.executeDispatch(document, ".uno:ToggleMergeCells", "", 0, args2())


end sub


Wie kann ich diesen Vorgang, per Schleife, bis zur letzen Zeile durchlaufen lassen? Abruchbedingung auch hier 'letzte Zeile'.
Die Bereich: args1(0).Value = "$AX$2:$AZ$2" müsste also bei jedem Durchgang erhöht werden.

Bei der Ausführung des zweiten Skript, kommt eine Fenster mit der Abfrage: Ob Inhalte verschoben werden sollen?
Das müsste im Automatikmodus mit 'true' bestättigt werden, sonst muss man paar hundertmal klicken.. (?)

Das ist aktuelle mein Ansatz, vielleicht gibt es mit Open Office Mitteln eine viel elegantere Lösung.
Bin für jeden Vorschlag zur Lösung offen.

Vielen Dank im Voraus

Kutte



An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten