Wie mit Makro den letzten Datensatz rückgängig mache

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

teamdj
Beiträge: 8
Registriert: Fr, 20.04.2018 07:09

Wie mit Makro den letzten Datensatz rückgängig mache

Beitrag von teamdj » Di, 28.05.2019 00:17

Thema verschoben in Bereich Makros! 28.05.2019 - Toxitom (Moderator)

Hallo,

Ich habe in einer Cal Tabelle von Libre Office Version: 6.2.4.2 (x64)
mehrere Buttons erstellt. Dann habe ich per Makro aufzeichnen gewisse Aktionen aufgezeichnet
und diese dann (LibreOffice Basic Makro) unter Meine Makros - DachsCarwash gespeichert.

Das Modul : NeueDatenWartungEintragen sieht so aus:

*******************************************************************

1 REM ***** BASIC *****
2
3
4
5 sub Main
6 rem ----------------------------------------------------------------------
7 rem define variables
8 dim document as object
9 dim dispatcher as object
10 rem ----------------------------------------------------------------------
11 rem get access to the document
12 document = ThisComponent.CurrentController.Frame
13 dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
14
15 rem ----------------------------------------------------------------------
16 dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())
17
18 rem ----------------------------------------------------------------------
19 dim args2(0) as new com.sun.star.beans.PropertyValue
20 args2(0).Name = "ToPoint"
21 args2(0).Value = "$B$190"
22
23 dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
24
25
26 end sub
27

**************************************************************************
hier wird nach klick des Button´s zur Zelle $B$190

Jetzt kann der Benutzer in der Zelle $B$190 Daten eintragen.
Darunter befindet sich ein Button mit dem man den eingetragenen Wert speichern kann, welches ich ebenfalls
mit Makro aufzeichnen erstellt habe.
Insoweit funktioniert das auch alles !!

Ich habe aber noch einen Button dem ich auch ein Makro zuweisen möchte.....
Dieser Button ist folgendermaßen beschriftet "Daten Rückgängig mach"
hier möchte ich ein Makro hinterlegen welchen bei Aktion ausführen den Datensatz wieder Rückgängig macht
und danach die Tabelle speichert. Es soll aber nur der Datensatz aus der Zelle $B$190 rückgängig gemacht werden.

In der Zelle $B$190 steht ein Datensatz 13.Nov 18 wenn jetzt der Datensatz überschrieben wird mit 14.Nov 18
Dann soll das Makro nach Ausführung den Datensatz in Zelle $B$190 wieder auf den Wert 13.Nov 18 setzen und die Tabelle dann speichern.

Wenn ich das mit Makro aufzeichnen mach sieht der Code folgendermaßen aus :

**********************************************************************************
1 REM ***** BASIC *****
2
3
4
5 sub Main
6 rem ----------------------------------------------------------------------
7 rem define variables
8 dim document as object
9 dim dispatcher as object
10 rem ----------------------------------------------------------------------
11 rem get access to the document
12 document = ThisComponent.CurrentController.Frame
13 dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
14
15 rem ----------------------------------------------------------------------
16 rem dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
17
18 rem ----------------------------------------------------------------------
19 dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())
20
21
22 end sub
23

*******************************************************************************************

Die Tabelle wird bei Aktion ausführen zwar gespeichert, aber der Datensatz in Zelle $B$190
wird nicht rückgängig gemacht.

wie kann ich das realisieren ??

Toxitom
********
Beiträge: 3616
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Wie mit Makro den letzten Datensatz rückgängig mache

Beitrag von Toxitom » Di, 28.05.2019 08:28

Hey

in dem Du in Zeile 16

Code: Alles auswählen

15 rem ----------------------------------------------------------------------
16 rem dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
das "rem" entfernst.

"REM" ist eine Kommentarzeile. Der Makrorekorder ist nicht wirklich gut, vieles ist nicht sinnvoll aufzeichenbar. Deswegen kommentiert der Rekorder des öfteren seine eigenen Code-Zeilen aus, um Probleme zu verhindern.

In deinem Fall sollte es problemlos funktionieren.

Aber: "uno:UnDo" bezieht sich immer auf ide letzte Aktion in der Tabellen-Kalkulation - also dem Letzen Eintrag in der Undo-Liste. Hat laso Dein Ausführender eine andere Aktion durchgeführt, wird diese dann Rückgängig gemacht ! Ist immer alles mit Vorsicht zu ggeniessen.

VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

Antworten