Op een bepaalde manier kwam ik deze draad opnieuw tegen. Eerst ben ik geruime tijd bezig geweest om te kijken of ik een goede oplossing kon vinden voor de gevraagde macro door API code. Het is mij niet gelukt. Op een bepaald moment kwam ik op de gedachte dat de meest simpele oplossing voor dit probleem wel is het toepassen van speciaal plakken na het kopiëren van de gegevens.
Code: Selecteer alles
sub Main
rem ----------------------------------------------------------------------
rem define variables
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 = "$B$2:$B$11"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$C$2:$C$11"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
rem ----------------------------------------------------------------------
dim args4(5) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Flags"
args4(0).Value = "SVD"
args4(1).Name = "FormulaCommand"
args4(1).Value = 1
args4(2).Name = "SkipEmptyCells"
args4(2).Value = false
args4(3).Name = "Transpose"
args4(3).Value = false
args4(4).Name = "AsLink"
args4(4).Value = false
args4(5).Name = "MoveMode"
args4(5).Value = 4
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args4())
end sub
Plakken Speciaal
Plakken Speciaal (ctrl-shift-V) staat allerlei extra bewerkingen toe die steeds opnieuw gekozen moeten worden. Het is wel zo dat voor zover ik weet de laatst gekozen mogelijkheden onthouden worden. Het wordt in de help file goed beschreven.
Goed combineren van Plakken Speciaal en het geven van namen aan een gebied
Het is voor elke gebruiker belangrijk om regelmatig de helpfile te lezen ook voor mij. Ook het lezen van door mij gewaardeerde berichtenplaatsers op het Engelse forum maakt dat ik nieuwe dingen leer. Vaak ook is het belangrijk bij het programmeren om kleine mogelijkheden goed te combineren. In dit geval is een goede combinatie de opgenomen macro en het geven van een naam aan de twee bijelkaar horende gebieden. Ik heb gekozen voor: Bron en Doel. Het is niet noodzakelijk dat deze twee op het zelfde tabblad zijn waarschijnlijk wel in het zelfde bestand. De namen Bron en Doel kunnen gebruikt worden in de macro. Let wel: de namen Bron en Doel staan in de macro tussen aanhallingstekens
Oefen eerst met de instelling
Het is niet noodzakelijk dat het bronbereik en het doelbereik even groot moeten zijn. Soms wil men een enkele waarde ,enkele cel, bij een range optellen. Soms worden twee ranges van gelijke grootte bij elkaar opgeteld.
Code: Selecteer alles
Macro met ingevulde rangenamen
sub Main_metnamen
rem ----------------------------------------------------------------------
rem define variables
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 = "Bron"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "Doel"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
rem ----------------------------------------------------------------------
dim args4(5) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Flags"
args4(0).Value = "SVD"
args4(1).Name = "FormulaCommand"
args4(1).Value = 1
args4(2).Name = "SkipEmptyCells"
args4(2).Value = false
args4(3).Name = "Transpose"
args4(3).Value = false
args4(4).Name = "AsLink"
args4(4).Value = false
args4(5).Name = "MoveMode"
args4(5).Value = 4
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args4())
end sub
Opgenomen macro's
Opgenomen macro's zijn in het algemeen traag en kunnen beter ook niet gebruikt worden voor bewerkingen in loops. Er is naar mijn idee niets verkeerd aan het toepassen van goed opgenomen macro's. Een goed opgenomen macro weerspiegeld vaak ook een goede kennis van de normale werking van OpenOffice.