Tabellenereignis mit Basic zuweisen

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

Moderator: Moderatoren

Johannes
Beiträge: 2
Registriert: Do, 28.03.2019 13:00
Wohnort: Papenburg

Tabellenereignis mit Basic zuweisen

Beitrag von Johannes » Di, 05.11.2019 10:50

Hallo liebes Forum,

ich beschäftige mich noch nicht lange mit LO, konnte aber hier im Forum, über Google-Suche und Makrorecorder schon vieles Lernen und Herausfinden.
Ich arbeite mit Win10 und LO 6.3.2.2.
Mit der Forum- sowie Googlesuche konnte ich für mein Problem noch keine Lösung finden und auch der Makrorecorder brachte nicht das erhoffte Ergebnis. Vielleicht mache ich ja hier etwas Falsch!!
Darum möchte ich Euch nun um Hilfe bitten.
Ich habe ein Calc-Dokument mit einem Tabellenblatt, dem als Tabellenereignis - Inhalt geändert ein Makro zugewiesen wurde.
Wenn sich jetzt die Zelle J1 auf dem Tabellenblatt ändert, wird das Tabellenblatt kopiert, umbenannt und ans Ende gestellt. Das ganz Grob zum Hergang.

'-- Blatt kopieren
oDoc.Sheets().CopyByName(oSheets.Name, BlattName, oDoc.Sheets.Count)

Nun habe ich das Problem, das beim neuen Tabellenblatt dem Tabellenereignis - Inhalt geändert KEIN Makro mehr zugewiesen ist und ich es manuell wieder zuweisen muß.
Frage an Euch: Läßt sich dieser Mißstand gleich beim Kopieren des Tabellenblattes mit Angeben, das diese Makrozuweisung erhalten bleibt?
Oder gibt es anschließend nach dem Kopierbefehl die Möglichkeit über Basic diese Zuweisung wieder herzustellen?

Vielen Dank im Vorraus für Eure Hilfe.

LG Johannes
PS: Ein blindes Huhn findet auch mal ein Korn. :roll:

Stephan
********
Beiträge: 11286
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Tabellenereignis mit Basic zuweisen

Beitrag von Stephan » Di, 05.11.2019 13:27

z.B. wenn das zuzuweisende Makro im Dokument gespeichert ist:

Code: Alles auswählen

Dim Props(1) as new com.sun.star.beans.PropertyValue
Props(0).Name = "EventType"
Props(0).Value = "Script"
Props(1).Name = "Script"
Props(1).Value = "vnd.sun.star.script:Standard.Module1.Main?language=Basic&location=document"

oDoc.Sheets.getByName(BlattName).Events.ReplaceByName("OnChange", Props())

Hierbei "Standard.Module1.Main" durch die realen Werte für Bibliothek-Name, Modul-Name und Makroname ersetzt werden.


Gruß
Stephan

Johannes
Beiträge: 2
Registriert: Do, 28.03.2019 13:00
Wohnort: Papenburg

Re: Tabellenereignis mit Basic zuweisen

Beitrag von Johannes » Di, 05.11.2019 14:15

Hallo Stephan,

ja, das Makro ist im Dokument gespeichert. Hätte ich noch erwähnen können.

Danke für das kurze Script, hat natürlich funktioniert. Damit ist mein Problem gelöst.

Aus reiner Neugier:
Wie würde der Codesnibsel aussehen, wenn das Makro nicht im Dokument, sondern unter 'Meine Makros & Dialoge' gespeichert ist?


Vielen Dank für deine Mühe und deiner Zeit.

LG Johannes

PS: Wie setzt man diesen Beitrag auf gelöst?????
PS: Ein blindes Huhn findet auch mal ein Korn. :roll:

Stephan
********
Beiträge: 11286
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Tabellenereignis mit Basic zuweisen

Beitrag von Stephan » Di, 05.11.2019 14:51

Wie würde der Codesnibsel aussehen, wenn das Makro nicht im Dokument, sondern unter 'Meine Makros & Dialoge' gespeichert ist?
z.B. mit:
"vnd.sun.star.script:Standard.Module1.Main?language=Basic&location=application"
PS: Wie setzt man diesen Beitrag auf gelöst?????
indem Du DEinen ersten Beitrag Editierst und dort vor den Anfang des 'Betreffs' schreibst "[Gelöst]"


Gruß
Stephan

Antworten