Makro arbeitet nicht nach öffnen mit Macro...

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

Moderator: Moderatoren

herbk
**
Beiträge: 36
Registriert: Fr, 16.01.2004 14:29
Kontaktdaten:

Makro arbeitet nicht nach öffnen mit Macro...

Beitrag von herbk »

Folgendes Problem:
Ich öffne die Datei B, welche ein Makro enthält, mit einem Makro aus der Datei A.
Das Macro der Datei B lässt sich dann nicht ausführen. Das Makro wird wohl gar nicht aufgerufen, denn selbst bei nur
sub test
Dim text as string
text="sag mir was"
msgbox text
end sub
erhalte ich nicht mal eine leere Msgbox

Wenn ich beide Dateien ganz normal mit "Datei öffnen" öffne, funktionieren die enthaltenen Makros.

Bin da jetzt echt ratlos.
Datei A sollte ein Auswahlmenü sein....
HerbK
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Herbert,
Das Macro der Datei B lässt sich dann nicht ausführen. Das Makro wird wohl gar nicht aufgerufen
Das dürfte was mit der Sicherheit zu tun haben, um nicht über diesen Umweg automatisch schädlichen Code auszuführen.

Sollte sich aber über folgenden Weg lösen lassen: Datei öffnen (eventuell auch versteckt), Basic-Modul der Datei laden und Makro direkt aufrufen.

So oder so ähnlich müsste es doch eigentlich gehen.

Gruss
Thomas

PS: Lade mir die neuste Version bei Gelegenheit mal runter. Vielen Dank.
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
herbk
**
Beiträge: 36
Registriert: Fr, 16.01.2004 14:29
Kontaktdaten:

Beitrag von herbk »

Hallo Thomas
ok, das Argument Sicherheit zählt natürlich.....
aber
Basic-Modul der Datei laden und Makro direkt aufrufen
wird das Basic Modul nicht automatisch mit der Datei mit geladen?
und das Macro direkt aufrufen ist auch nicht ganz Sinnvoll:
es soll an dem über Macro geöffnetem Dokument ja erst noch etwas geändert werden, bevor dessen Macro ausgeführt werden soll. (oder habe ich Dich da falsch verstanden?)

Mit dem automatischen ausführen eines Macros habe ich sowieso ein Problem: es wird bei mir einfach nicht gemacht....:
Ich weise über Extras->Anpassen->Ereignisse dem Document ein Macro (am Dokument gespeichert) zu, doch beim öffnen passiert nichts.
Habe das auch schon mit der Rechnungsvorlage von Euch (Rech_Vorlage_Bsp.stw) probiert, auch da passiert nichts.

Um das ganze nutzen zu können, muß ich allerdings noch etwas anderes herausfinden:
wie schalte ich zwischen 2 offenen Dokumenten hin und her?
Das soll ablaufen:
gehe zu Dokument a, lese Wert a
gehe zu Dokument b, schreibe Wert a
gehe zu Dokument a, lese Wert b
gehe zu Dokument b, schreibe Wert b
usw...
innerhalb eines Tabellendokumentes vom sheet a zu scheet b habe ich kein Problem... nur das wechseln zwischen den Dokumenten...

Danke
Gruß Herbert
HerbK
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Herbert,
herbk hat geschrieben:...
wird das Basic Modul nicht automatisch mit der Datei mit geladen?
Ja, das schon. aber eben in dem Dokument. Ob das deswegen auch in aktuellen Dokument zur Verfügung steht?? hab ich noch nie ausprobiert.
herbk hat geschrieben: Mit dem automatischen ausführen eines Macros habe ich sowieso ein Problem: es wird bei mir einfach nicht gemacht...
Auch das ist ein normaler Prozess. Ein im dokument gespeichertes Makro kann nicht beim Öffnen automatisch ausgeführt werden! Steht so auch in der Hilfe bzw. Spezifikation. Hintergrund: einmal Sicherheitsbedenken, zum anderen glaucbe ich, dass es etwas mit der Reihenfolge beim Laden zu tun hat. Erst werden die Makros geladen, dann das Dokumnet. Viele Objekte stehen also zum Zeitpunkt des Ladens der Basic-Module noch gar nicht zur Verfügung.
Ich habe solche Probleme meist umgangen, in dem ich ein Formulatfeld eingefügt habe, das im ersten Formular automatisch den Fokus erhält (beim Laden). Un dann habe ich an das Ereignis (erhält Fokus) das Makro gebunden. Das hat funktioniert. Muss man nur ein paar weitere Sicherheitsabfragen programmieren, da das Formulartfeld ja auch später nochmal den Fokus erhalten kann.
herbk hat geschrieben:innerhalb eines Tabellendokumentes vom sheet a zu scheet b habe ich kein Problem... nur das wechseln zwischen den Dokumenten...
Verschiedene Dokumente sind verschiedene Objekte. sollte eigentlich kein Problem sein. Wenn ich mal Zeit finde, schreib ich dir ein kleines Beispiel.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
herbk
**
Beiträge: 36
Registriert: Fr, 16.01.2004 14:29
Kontaktdaten:

Beitrag von herbk »

Hallo Thomas
mit dem, was du sagst, was in der Hilfe steht, bin ich so nicht einverstanden:
Wenn ich in der Hilfe "Makro" eingebe, gibt es dort einen Menüpunkt "automatisch ausführen". Lasse ich mir den anzeigen, steht dort
Wie Sie diese Funktion erhalten...
Menü Extras - Anpassen - Register Ereignisse
und
Dokument
Mit Auswahl von Dokument erreichen Sie, dass das zugeordnete Makro nur dann beim Auftreten eines Ereignisses ausgeführt wird, wenn das Dokument, welches das Makro enthält, aktiv ist. Ein Makro, das Sie dem Ereignis Dokument öffnen zuweisen, wirkt z. B. als Autostart-Makro.
(OOo 1.1 von der Suse 9.0 CD)
Das aber nur zur Info...

Die von Dir vorgeschlagene Alternative über ein Formularfeld mit "Fokus 1" funktioniert... hat aber einen Nachteil:
Das Makro wird dann als Endlosschleife ausgeführt....
die währe wohl ganz einfach zu beenden, wenn man (ich) den Fokus am Ende des Makrs einfach dem nächsten Formularfeld übergeben würde...
nur den Befehl dafür finde ich mal wieder nirgends....
Die suchen Funktion spuckt bei "Fokus" weder hier am Board noch bei kaldewei noch im StarOffice Basic-Handbuch etwas für mich brauchbares aus...
Du hast auf eine ähnliche Frage gestern in der Mailingliste auf das StarOffice Basic-Handbuch hingewiesen.
Da steht allerdings zum Thema Focus setzen nur bei den Dialogen etwas dazu drin - und der Befehl funktioniert bei Formularfeldern nicht.

Zu dem StarOffice Basic-Handbuch noch ganz allgemein:
So toll finde ich es nicht.... Beginnt damit, daß die Seitenangben irgendwann nicht mehr stimmen und endet damit, daß der eine oder andere Befehl erst funktioniert, nachdem Du ihn hier richtggestellt hast....

Währe nett, wenn Du hier posten würdest, wie das mit dem Fokus übergeben geht....Evtl bekomme ich ja dann auch das mit dem "zwischen 2 Dokumenten umschalten" hin...

Danke
Gruß Herbert
HerbK
Ein__Stadtmensch
***
Beiträge: 61
Registriert: Do, 18.12.2003 10:08

Beitrag von Ein__Stadtmensch »

herbk hat geschrieben:Menü Extras - Anpassen - Register Ereignisse
Das hat bei mir nun auch funktioniert mit dem automatischen Starten. Man muss das Makro bei "Erzeugen des Dokumentes" auswählen und das Dokument vor allem als Dokumentvorlage abspeichern und bei der Sicherheitsabfrage "ausführen" auswählen.
Evtl bekomme ich ja dann auch das mit dem "zwischen 2 Dokumenten umschalten" hin...
Das mit den zwei Dokumenten geht eigentlich ganz einfach. Du erzeugst ein Objekt dokument1 und ein Objekt dokument2 und weist jedem entsprechend die gewünschte Datei zu. Dann kannst du anschliessend einfach über das entsprechende Objekt entweder das eine Dokument oder das andere "ansprechen".
herbk
**
Beiträge: 36
Registriert: Fr, 16.01.2004 14:29
Kontaktdaten:

Beitrag von herbk »

Als Vorlage abspeichern geht nicht, weil dann ein anderes Makro des Dokumentes nicht mehr funktioniert....
oder Du sagst mir, wie ich den Inhalt einer Variablen aus dem Dokument 1 in Document 2 weiterverwenden kann - (mit global Variable geht's nicht)
...und weist jedem entsprechend die gewünschte Datei zu
wie?
doc1=StarDesktop.CurrentComponent sagt doc1=aktuelles Document

durch was muß ich "CurrentComponent" ersetzen?
HerbK
Ein__Stadtmensch
***
Beiträge: 61
Registriert: Do, 18.12.2003 10:08

Beitrag von Ein__Stadtmensch »

herbk hat geschrieben:Als Vorlage abspeichern geht nicht, weil dann ein anderes Makro des Dokumentes nicht mehr funktioniert....
oder Du sagst mir, wie ich den Inhalt einer Variablen aus dem Dokument 1 in Document 2 weiterverwenden kann - (mit global Variable geht's nicht)
Vielleicht die Variablen in eine Textdatei oder Calc-Datei auslagern, so dass das eine Makro was reinschreibt und das andere Makro es wieder ausliest...
doc1=StarDesktop.CurrentComponent sagt doc1=aktuelles Document durch was muß ich "CurrentComponent" ersetzen?
So steht es in der Beschreibung:

Code: Alles auswählen

Dim Doc As Object
Dim Url As String
Dim Dummy()
Url = "file:///C:/test.sxw"
Doc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, Dummy())
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Herbert,

viele Fragen, einige sind ja schon beantwortet.
Ich versuche mal ein paar weiter Antworten:
oder Du sagst mir, wie ich den Inhalt einer Variablen aus dem Dokument 1 in Document 2 weiterverwenden kann - (mit global Variable geht's nicht)
Diese Probleme umgehe ich normalerweise durch Speichern der benötigen Variablen im Dokument (in Zellen, die entweder nicht sichtbar sind weil überdeckt oder ausgeblendet) und auslesen bei Bedarf. Damit habe ich meine ganzen "Übergabe"-Probleme gelöst.
Das Makro wird dann als Endlosschleife ausgeführt....
die währe wohl ganz einfach zu beenden, wenn man (ich) den Fokus am Ende des Makrs einfach dem nächsten Formularfeld übergeben würde...
Das ist auch nicht so einfach. Hier mal ein bischen Code, wie du einem Formuarfeld (Name "Text1") den Fokus übergibst.

Code: Alles auswählen

Sub Main
	oDoc=thisComponent
	docCtr=oDoc.getCurrentController()
	oSheet=oDoc.sheets(0)
	oForm=oSheet.Drawpage.Forms.GetByIndex(0)
	oFeld=oForm.getByName("text1")
	ctlView=docCtr.getControl(oFeld)
	ctlView.setFocus()
End Sub
Hinweise dazu findest du schon im Handbuch, unter "Formulare", der Rest ist ausprobieren....

Ansonsten hast du natürlich recht: Das Handbuch bietet zwar eine Einführung, bietet dann aber in vielen Punkten zu wenig. Hinzu kommen viele, viele Fehler, (Indizierung, Rechtschreibfehler etc), die das dann auch nicht gerade einfacher machen.

Aber...aktuell gibt es wohl nichts besseres.

Mit den zwei Dokumenten kann ich dir aktuell auch keine Lösung anbieten. Es wird wohl so oder so ähnlich auch gehen, aber wie????

Wahrscheinlich musst du hier mit StarDesktop arbeiten, das ist die einmal gestartete Hintergrundanwendung aller OOo Teile. War früher ja auch mal ein tatsächlicher Desktop. Umter dem Bereich CurrentController.Frame gibt es Methoden wie windowsActivate und andere, hab aber damit noch nicht gearbeitet.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
herbk
**
Beiträge: 36
Registriert: Fr, 16.01.2004 14:29
Kontaktdaten:

Beitrag von herbk »

Hallo Thomas
sieht vielversprechend aus....
und werde es heute Abend gleich ausprobieren. Die Idee mit der" Variable über abspeichern übergeben" ist auch gut - manchmal kommt man wirklich auf's naheliegendste nicht....
Gefällt mir eigentlich sogar besser, weil ich dann das Dokument wieder als Vorlage verwenden kann.

Was mir immer fehlt ist eine "Liste" mit den möglichen Befehlen/Aufrufen
getCurrentController() steht z.B. auch nicht im Handbuch...
die Syntax ist ja schon immer die gleiche (oder sehr ähnlich), doch wenn einem der Befehl fehlt kann man lange probieren (hab Gestern Abend und Heute Morgen bestimmt 4 Stunden probiert..)
Unter dem Bereich CurrentController.Frame gibt es Methoden wie windowsActivate und andere
das ist genau was ich meine:
es gibt sicher Methoden, nur wo finde ich sie??
CurrentController.Frame kommt im HB auch nicht vor...

ich habe mir am WE schon den das OOo Entwicklerpacket heruntergeladen, da ist die Doku recht umfangreich (was ja dann manchmal auch ein Nachteil ist...)
Vielleicht muß ich ja dann nicht mehr so viel Fragen....

Danke
Herbert
HerbK
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Herbert,
herbk hat geschrieben: Was mir immer fehlt ist eine "Liste" mit den möglichen Befehlen/Aufrufen
getCurrentController() steht z.B. auch nicht im Handbuch...
....
es gibt sicher Methoden, nur wo finde ich sie??
CurrentController.Frame kommt im HB auch nicht vor...
Tia, da geht es dir nicht alleine so. Ich hab auch schon viele, viele Stunden damit verbracht, meine Ideen, die ich für logisch und durchfürbar halte, mit entsprechenden Befehlen zu untermauern.

OK, das Handbuch hat ein paar grundlegende Tipps, der Rest ist einfach ausprobieren. Ich lass mir dann immer die Methoden und Eigenschaften der Objekte anzeigen und versuche aus den Namen auf mögliche weitere Wege zu schliessen.
Und dann einfach mal ausprobieren, was denn so alles passiert. Ist eben ein zeitaufwendiger Job....!

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