VBA 3 Zellen kopieren und verbinden. Schleifendurchlauf?
Verfasst: 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
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