Problem mit Tabellenereignis

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

Moderator: Moderatoren

Benutzeravatar
sven-my
*****
Beiträge: 358
Registriert: Fr, 14.12.2007 19:56

Problem mit Tabellenereignis

Beitrag von sven-my »

Hallo Experten,

mit der Makro-Zuordnung zu einem Tabellenereignis habe ich folgendes Verständnisproblem:

ich habe ein Makro mit dem Tabellenereignis "Inhalt geändert" in dem Blatt "Test" verknüpft.

Wenn ich irgendetwas in dieses Tabellenblatt eingebe, wird tasächlich das Makro ausgeführt.

Aber:

Wenn ich per Makro aus einem anderen Tabellenblatt etwas in das Tabellenblatt "Test" einfüge tut sich nichts - obwohl doch auf dem Tabellenblatt etwas geändert wurde.

Es ist etwas lästig, etwas einzufügen, was ich gleich darauf wieder löschen muß, da wäre es einfacher einen Button zu erstellen, was ich aber eben vermieden wollte.

Hab' ich da was faslsch verstanden ?

gruß
sven-my
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Problem mit Tabellenereignis

Beitrag von turtle47 »

Hallo sven-my,

wähle zusätzlich das Tabellenereignis "Formel geändert" und die Welt ist wieder in Ordnung.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Benutzeravatar
sven-my
*****
Beiträge: 358
Registriert: Fr, 14.12.2007 19:56

Re: Problem mit Tabellenereignis

Beitrag von sven-my »

Hallo Jürgen,

ich nahm Deine Signatur "beim Wort" - daher habe ich gemeint: keine Formel wird beim Einfügen von Daten geändert, also kann dieses Ereignis nicht zutreffen.

Aber Scherz beiseite, was bedeutet zusätzlich ?

gruß
sven-my
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Problem mit Tabellenereignis

Beitrag von turtle47 »

Wenn ich per Makro aus einem anderen Tabellenblatt etwas in das Tabellenblatt "Test" einfüge tut sich nichts - obwohl doch auf dem Tabellenblatt etwas geändert wurde.
Ok ok, jetzt habe auch ich diesen Satz verstanden.
Aber Scherz beiseite, was bedeutet zusätzlich ?
Im Fenster "Aktion zuweisen" kannst Du mehreren Ereignisse Aktionen zuweisen. Das Hilft in diesem Fall aber nicht (Versuch macht kluch).

Rufe doch in dem "Einfügemakro" am Ende des Durchlaufs das "Ereignismakro" auf.

Code: Alles auswählen

Sub Inhalt_geaendert
print "Inhalt Tabelle 1 wurde geändert"
End Sub

Sub Schreiben
myDoc = thisComponent
mySheet = myDoc.sheets(0)
mycell = mysheet.getCellByPosition(0,0)
mycell.value = 96
Inhalt_geaendert
End sub
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Benutzeravatar
sven-my
*****
Beiträge: 358
Registriert: Fr, 14.12.2007 19:56

Re: Problem mit Tabellenereignis

Beitrag von sven-my »

Hallo Jürgen,

das hatte ich zuerst, habe dann aber festgestellt, daß es mehrere Ereignisse sind, die etwas verändern, und dann diese Angabe aktualisiert werden soll.
Allen gemeinsam ist die Tatsache, daß sich auf dem Blatt "Test" etwas ändert (Daten dazu, oder Daten weg).

Jetzt habe ich aber ein anderes, viel schwerwiegendesres Problem : ich habe tatsächleich auch dem Ereignis "Formel geändert" dieses Makro zugewiesen, wollte es ausprobieren, aber dann dauerte alles so lange - nach einigem Stöbern fand ich, daß irgendein Makro noch ausgeführt wird. Auf der Seite, in der man die Makros editiert, war zu sehen, daß es dieses Makro war, daß zu dem Zeitpunkt zum 1438.Mal aufgrufen wurde.
Ein Löschen der Verknüpfung ist nicht möglich. Vor lauter Verzweiflung habe ich die Zeile "sub aktualisieren", Buchstabe für Buchstabe gelöscht, OpenOffice über den Taskmanager abgewürgt, und wieder neu gestartet.

Erfolglos. Auf der Makro-Editierseite ich auch nicht mehr zu sehen, welches Makro da 'dauerläuft' , außer an dem kleinen Button, mit dem man ein laufendes Makro abbrechen kann, sieht man, daß noch ein Makro dauerausgeführt wird.
Bloß welches ???

gruß
sven-my
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
Benutzeravatar
sven-my
*****
Beiträge: 358
Registriert: Fr, 14.12.2007 19:56

Re: Problem mit Tabellenereignis

Beitrag von sven-my »

so, jetzt ist Ruhe im Dokument --- habe das Tabellenblatt gelöscht.

Dafür gibt es jetzt andere Fehler :

1. ein Basic-Dialog ist völlig versaut
2. ein Button, mit dem ich z.B. Makro 1 ausführen will, startet das Makro 5
--- Button gelöscht, neu erstellt, wieder mit Makro 1 belegt, startete wieder das Makro 5
--- Makro 5 gelöscht, Button wieder neu erstellt, jetzt klappts

weitere Fehler zu suchen, hab' ich heute keine Lust mehr

gruß
sven-my
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
Benutzeravatar
sven-my
*****
Beiträge: 358
Registriert: Fr, 14.12.2007 19:56

Re: Problem mit Tabellenereignis

Beitrag von sven-my »

Hallo,

so, jetzt bin ich wieder aufnahmefähig. Wo der eigentliche Fehler lag, konnte ich nicht herausfinden, auch völliges Benden von AOO half nicht. Heute morgen habe ich dann mein Dokument geöffnet, den Dialog repariert, das gelöschte Makro wiederhergestellt - jetzt läufts.

Zu meiner eigentlichen Frage habe ich eine "Lösung" gefunden (von hinten durch die Brust, ins linke Auge):

Code: Alles auswählen

sub aktualisieren
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
REM tabN = "das Tabellenblatt, welches aktualisiert werden soll"
	myDoc = ThisComponent
	oView = myDoc.CurrentController
	oSheet = myDoc.Sheets.getByName(tabN)
	oView.setActiveSheet(oSheet)

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$AC$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "StringName"
args3(0).Value = "1"
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args3())
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())
args2(0).Name = "ToPoint"
args2(0).Value = "$AC$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
args3(0).Name = "StringName"
args3(0).Value = ""
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args3())
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())
end sub
Mir ist klar, jedem der Experten von Basic sträuben sich sämtliche Haare, aber es funktioniert.
Diesen code habe ich an das Kopier-Makro (das Makro sucht aus einem Datensatz, der aus 26 Datenfeldern besteht, für eine andere Aufgabe 6 Datenfelder raus, und kopiert sie auf ein anderes Tabellenblatt) angehängt.

Falls jemand eine Vereinfachung, oder Verbesserung hätte, wäre ich sehr dankbar.

gruß
sven-my
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
Karolus
********
Beiträge: 7084
Registriert: Mo, 02.01.2006 19:48

Re: Problem mit Tabellenereignis

Beitrag von Karolus »

Hallo

Ich sehe da nirgends eine Zuweisung eines "Tabellennamens" an 'Tabn' , wo findet die statt - im Nirvana ?

Ansonsten:
myDoc = ThisComponent
oView = myDoc.CurrentController
oSheet = myDoc.Sheets.getByName( tabN )
oView.setActiveSheet(oSheet)
myDoc.isModified( True )
sollte reichen.
Version: 6.1.5.2
Build-ID: 1:6.1.5-3+rpi1+deb10u6+rpt1
raspberry-pi-OS
Benutzeravatar
sven-my
*****
Beiträge: 358
Registriert: Fr, 14.12.2007 19:56

Re: Problem mit Tabellenereignis

Beitrag von sven-my »

Lieber Karolus,

was meinst Du wohl, weshalb ich dieses REM dortreingeschriebn habe ???
REM tabN = "das Tabellenblatt, welches aktualisiert werden soll"
Auch wenn ich nicht der Hellste in Beziehung >Basic< bin, könnte man sich vorstellen, daß es irgendwo im vorangegangenen Makro festgelegt wird.
Entweder mit activSheet, oder getByName
Ich wollte nur nicht das komplette Makro hier mit einbringen, weil es nicht das Problem erhellt, zweitens den code, den ich hier reingestzt habe um das zehnfache verlängert hätte.

Aber Du hast Recht, ich hätte es so schreiben sollen:

Code: Alles auswählen

sub aktualisieren
.
.
.
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
.
.
Zu Deinem Code : wenn ich das richtig interpretiere, ist es das Gleiche, was das "Tabellenereignis" bewirkt - nur wie soll ich es einbauen ? Die Änderungen geschehen mal per Makro, mal "per Hand" - ein Listener bringt da auch nciht, denn welche Zelle (von 26 x 850) soll ich da überwachen ?

Das eigentliche Problem ist, daß ohne eine Änderung mit abschließenden [RETURN] bzw. [ENTER] eine Änderung nicht als solche erkannt wird.

Wenn also Daten per Makro in das Tabellenblatt eingetragen werden, ist es für die Abfrage durch das Tabellenereignis >Inhalt geändert< KEINE Änderung.


gruß
sven-my
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
Karolus
********
Beiträge: 7084
Registriert: Mo, 02.01.2006 19:48

Re: Problem mit Tabellenereignis

Beitrag von Karolus »

Hallo
Ich habe jetzt den oben geposteten Code getestet - :( tut leider nicht - bleib bei deinem Dispatchercode.

Karolus
Version: 6.1.5.2
Build-ID: 1:6.1.5-3+rpi1+deb10u6+rpt1
raspberry-pi-OS
Antworten