Seite 1 von 1

Makroaufzeichnung in Calc

Verfasst: Sa 2. Mai 2015, 13:30
von tipap
Hallo,

ich bin etwas irritiert bezüglich dem Aufzeichnen von Makros. Ich habe eine Tabelle, die einige Spalten hat. In diese wiederum sollen händisch Daten eingetragen werden, so ca. 500 Datensätze. Dazu wollte ich die Calc-Funktion Daten-> Formular nutzen, weil das die Eingabe doch ein bisschen einfacher gestaltet (nicht für mich, sondern für diejenigen, die das dann dort eintragen sollen, und die sind in der Regel nicht so versiert im Umgang mit Computern).

Um das direkt über einen Button zu aufzurufen, habe ich ein Makro aufgezeichnet. Zuerst markiert man ja den Bereich, der später vom Formular abgedeckt sein muss. Das klappt noch ohne weiteres. Wenn ich dann aber auf den Menüpunkt Daten -> Formular gehe, wird das nicht mehr im Makro mit aufgezeichnet.

Code: Alles auswählen

sub Daten_eingeben
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 = "Nr"
args1(0).Value = 2

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

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$A$1:$J$500"

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


end sub
Ist das denn grundsätzlich so, dass diese Funktion von der Makroaufzeichnung nicht erfasst wird? Kann mir jemand sagen, wie ich auf diesen Menüpunkt in StarBasic zugreife? Kann man diese Funktion überhaupt über ein Makro aufrufen?

Re: Makroaufzeichnung in Calc

Verfasst: Sa 2. Mai 2015, 16:19
von karolus
Hallo


Das wird mit aufgezeichnet, hier die manuell gekürzte Version ( passe bitte den Tabellennamen an )

Code: Alles auswählen

sub wechslen_DataForm
  dim document   as object
  dim dispatcher as object
  document   = ThisComponent.CurrentController.Frame
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  dim args(0) as new com.sun.star.beans.PropertyValue
  args(0).Name = "ToPoint"
  args(0).Value = "Tabelle2.A1"
  dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args())
  dispatcher.executeDispatch(document, ".uno:DataForm", "", 0, Array())
end sub
Du musst für →Daten→Formular auch nicht vorher den ganzen Bereich auswählen, es reicht schon eine Zelle in der `Kopfzeile`

Re: Makroaufzeichnung in Calc

Verfasst: Sa 2. Mai 2015, 17:26
von mikele
Hallo,

@karolus: Gibt es auch eine Möglichkeit, diesen internen Dialog ohne den Dispatcher aufzurufen?

Re: Makroaufzeichnung in Calc

Verfasst: Sa 2. Mai 2015, 18:18
von karolus
mikele hat geschrieben:Hallo,

@karolus: Gibt es auch eine Möglichkeit, diesen internen Dialog ohne den Dispatcher aufzurufen?
Ja, mglw. per →LO-Makros→Tools→Misc→dispatchSlot( ID )

Das Problem dabei: du musst erstmal die numerische ID der Aktion herausfinden die du aufrufen möchtest.
Es gab mal eine Tabelle `slots.sxc` im Netz, eine Kopie davon hab ich noch auf der Platte, aber die ist natürlich völlig veraltet mittlerweile....

Re: Makroaufzeichnung in Calc

Verfasst: Sa 2. Mai 2015, 23:29
von tipap
Hallo,

vielen Dank erstmal für deine Hilfe, @karolus.

Das war genau das Fitzelchen, das mir gefehlt hat. Ich habe es übrigens nochmal ausprobiert, ein Makro aufzuzeichnen, genau so, wie du es beschreibst. Und bei mir erscheint genau diese Zeile, also der Aufruf von DataForm, NICHT.

Kann das daran liegen, dass ich Libreoffice unter Linux verwende?