Seite 1 von 2

[gelöst]Makro automatisch ausführen, aber wie?

Verfasst: Di, 18.12.2012 16:05
von HHTiger
Hallo, ich habe ein Privatbrief Template erstellt und einen Dialog geschrieben, um die Adressdaten zu erfassen. Soweit so gut .... allerdings würde ich das Makro gerne automatisch ausführen lassen, wenn ich ein neues Dokument auf Basis des Template erstelle. Dazu sei noch erklärt, dass sich das entsprechende Makro (VB-Code) natürlich in dem gespeicherten Template befindet.

Außerdem öffnet sich jedesmal nach dem Schliessen der Dialoges das Code-Fenster. Wie kann ich das verhindern? Habe jetzt für dieses Problem ein neues Thema eröffnet.

Re: Makro automatisch ausführen, aber wie?

Verfasst: Di, 18.12.2012 16:31
von juetho
HHTiger hat geschrieben:Hallo, ich habe ein Privatbrief Template erstellt und einen Dialog geschrieben, um die Adressdaten zu erfassen. Soweit so gut .... allerdings würde ich das Makro gerne automatisch ausführen lassen, wenn ich ein neues Dokument auf Basis des Template erstelle.
Untersuche die Ereignisse unter Extras > Anpassen (Dokument erzeugt o.a.) und weise das Makro diesem Ereignis zu. Achte darauf (Auswahlliste unten), dass das Ereignis an der richtigen Stelle registriert wird.
Dazu sei noch erklärt, dass sich das entsprechende Makro (VB-Code) natürlich in dem gespeicherten Template befindet.
VB = Visual Basic. Das ist eine MS-Variante von Basic. Ich kann mir nicht vorstellen, dass du wirklich mit VB arbeitest. Das Basic von OO heißt Star-Basic (aus historischen Gründen) oder OO-Basic oder so.
Außerdem öffnet sich jedesmal nach dem Schliessen der Dialoges das Code-Fenster. Wie kann ich das verhindern?
Dazu müsstest du die Arbeitsweise genauer erläutern - Schritt für Schritt - oder ein Beispieldokument hochladen. Vielleicht ist das einfach eine Folge davon, dass du das Makro bisher manuell startest; oder es tritt ein Fehler auf, von dem du nichts erzählst.

Jürgen

Re: Makro automatisch ausführen, aber wie?

Verfasst: Di, 18.12.2012 18:27
von F3K Total
Moin HHTiger,
CROSSPOSTING ohne Referenz ist unhöflich!
R

Re: Makro automatisch ausführen, aber wie?

Verfasst: Di, 18.12.2012 21:46
von HHTiger
juetho hat geschrieben:Untersuche die Ereignisse unter Extras > Anpassen (Dokument erzeugt o.a.) und weise das Makro diesem Ereignis zu. Achte darauf (Auswahlliste unten), dass das Ereignis an der richtigen Stelle registriert wird.
Ich verstehe nicht so recht, was Du damit sagen möchtest. Vermute mal du meinst => das Makro dem Ereigniss zuweisen. Das lässt sich jedoch nicht auswählen, da das Makro Bestandteil des Templates ist. Zugewiesen werden können nur die Makros, die nicht Bestandteil des Dokumentes sind. In VBA wäre das Äquivalent "On Open" glaube ich.
VB = Visual Basic. Das ist eine MS-Variante von Basic. Ich kann mir nicht vorstellen, dass du wirklich mit VB arbeitest. Das Basic von OO heißt Star-Basic (aus historischen Gründen) oder OO-Basic oder so.
Das sollte nur ein Hinweis seien, dass ich das in OO implementierte VB-Derivat (jetzt weiss ich auch dass es Star-Basic, OO-Basic oder so heißt) benutze und NICHT JavaScript, BeanShell oder Python. Sorry für diese etwas "schwammige" Aussage zuvor.
Dazu müsstest du die Arbeitsweise genauer erläutern - Schritt für Schritt - oder ein Beispieldokument hochladen. Vielleicht ist das einfach eine Folge davon, dass du das Makro bisher manuell startest; oder es tritt ein Fehler auf, von dem du nichts erzählst.
In Ermangelung besseren Wissens (dies ist mein erstes Project in OO-Writer) habe ich im Template einen Feldtyp "Makro ausführen" benutzt und die Schriftfarbe auf weiß gesetzt, damit es nich mit gedruckt wird. Eine Fehlermeldung gibt es definitiv nicht. Die hätte ich hier sonst auch berichtet (falls ich sie nicht hätte auflösen können).

Re: Makro automatisch ausführen, aber wie?

Verfasst: Di, 18.12.2012 21:51
von HHTiger
F3K Total hat geschrieben:Moin HHTiger,
CROSSPOSTING ohne Referenz ist unhöflich!
R
Sorry, aber ich empfinde es als unhöflich, wenn Du mir hier solch einen Spruch reindrückst ohne zu erklären, was Du damit eigentlich meinst.

Wieso CROSSPOSTING???
Was heisst Crossposting?
Wieso zeigt der Link auf ein anderes Forum?
Welche Referenz soll fehlen?
Wieso ist mein Posting unhöflich?

Unter Crossposting verstehe ich das Posten desselben Postings unter verschiedenen Rubriken des selben Forums!

Re: Makro automatisch ausführen, aber wie?

Verfasst: Di, 18.12.2012 21:58
von F3K Total
Moin,
bzgl. Crossposting:
HHTiger hat geschrieben:Wieso zeigt der Link auf ein anderes Forum?
Welche Referenz soll fehlen?
Der Link zeigt auf den gleichen Beitrag von Dir! In eben einem anderen Forum.
Du hast die gleiche Frage in mehreren Foren gestellt.
Du beschäftigst also mehrere Leute mit der gleichen Frage.
Antworten die z.B. hier gegeben wurden, sind im anderen Forum nicht sichtbar und werden ggf. mehrfach bearbeitet. Unnötigerweise. Darum ist das unhöflich.
Wenn du schon in zwei Foren nachfragst solltest Du sie wenigstens verlinken (das ist mit Referenz gemeint)
Hier noch ein anderer Beitrag zum Thema
HHTiger hat geschrieben:da das Makro Bestandteil des Templates ist. Zugewiesen werden können nur die Makros, die nicht Bestandteil des Dokumentes sind
Das geht, Makros aus einem Dokument können gestartet werden, siehe Beitrag unten von Stephan.

R

Re: Makro automatisch ausführen, aber wie?

Verfasst: Di, 18.12.2012 22:02
von Stephan
Vermute mal du meinst => das Makro dem Ereigniss zuweisen. Das lässt sich jedoch nicht auswählen, da das Makro > Bestandteil des Templates ist.
dann solltest Du DEine Version von OO oder LO nennen, denn normalerweise ist das selbstverständlich möglich, Beispiel anhängend.
ich das in OO implementierte VB-Derivat
es handelt sich um einen ganz normalen Basic-Dialekt unter Vielen und kein VB-Derivat. (Wenn überhaupt wäre StarBasic mit VBA zu vergleichen, nicht jedoch mit VB.)


Gruß
Stephan

Re: Makro automatisch ausführen, aber wie?

Verfasst: Mi, 19.12.2012 01:56
von HHTiger
Hallo Stephan,
vorab: Dein Beispiel (vielen Dank dafür!) funktionert bei mir, allerdings kann ich die Erstellung nicht so ganz nachvollziehen. Ich benutze OpenOffice 3.4.1.

Von der Sache her weist Du dem Event "Neues Dokument" das Makro "Main" zu. Klar.

Daß das bei Dir funktioniert halte ich für einen Zufall oder Bug, da man das Makro "Main" NICHT aus dem Dokument benutzen kann. Die Tatsache, daß es aber funktioniert kommt meiner Meinung nach daher, daß Du überall die Standard-Vorgaben benutzt.

Beispiel: Makroname "Main", Bibliotheksname "Modul1".

Versuche einmal in meinem Dokument das Makro "ShowMessageBox" aus der Bibliothek "MyModule" mit dem Event "Dokument öffnen" zu verknüpfen.
Die Möglichkeit wird garnicht erst angeboten.

Von der Vorgehensweise müßte es eigentlich folgendermaßen funktionieren:

1.) Das Makro "ShowMessageBox" wurde im Fenster "OpenOffice.org Basic" erstellet.

2.) im selben Fenster dann <Extras> <Anpassen...>

3.) im Fenster "Anpassen" nun das Ereignis "Dokument Öffnen" auswählen und dann rechts unter "Zuweisen:" den Button "Makro..." anklicken.

4.) im Fenster "Makro-Selektor" müsste man jetzt auf der linken Seite unter "Bibliothek" zunächst das Dokument "Test.ott" und die Bibliothek "MyModul" auswählen und dann rechts unter "Name des Makros" das Makro "ShowMessageBox" auswählen und abschliessend mit dem "OK" Button beenden.

Doch leider sind die Schritte unter 4.) nicht möglich, da das Dokument bzw. Template "Test.ott" garnicht angeboten wird! :cry:



Zum Thema VB:

"Derivat" ("Abkömmling", von lateinisch derivare "ableiten")

Visual Basic Classic (entwickelt von Alan Cooper) war quasi der Urvater aller heute gängigen BASIC-Dialekte. Insbesobere sind VBA und VBScript Dialekte von VB!

Da z.B. OpenOffice-BASIC über den nahezu identischen Befehlssatz wie VB oder VBA verfügt und sich hauptsächlich in der API von VBA unterscheidet, kann man hier durchaus von einem "Abkömmling" sprich Derivat von VB oder VBA sprechen.

Letztlich sind somit alle heute existierenden BASIC-Dialekte Derivate des 1964 von John George Kemeny und Thomas Eugene Kurtz entwickelten BASIC.

Allerdings muss ich Dir in einem Punkt recht geben. Aus Sicht der Nomenklatur passt Dialekt besser, da es sich um eine Sprache handelt. :wink:

Gruss Klaus

Re: Makro automatisch ausführen, aber wie?

Verfasst: Mi, 19.12.2012 02:19
von HHTiger
F3K Total hat geschrieben:Moin,
bzgl. Crossposting:
HHTiger hat geschrieben:Wieso zeigt der Link auf ein anderes Forum?
Welche Referenz soll fehlen?
Der Link zeigt auf den gleichen Beitrag von Dir! In eben einem anderen Forum.
Du hast die gleiche Frage in mehreren Foren gestellt.
Du beschäftigst also mehrere Leute mit der gleichen Frage.
Antworten die z.B. hier gegeben wurden, sind im anderen Forum nicht sichtbar und werden ggf. mehrfach bearbeitet. Unnötigerweise. Darum ist das unhöflich.
Wenn du schon in zwei Foren nachfragst solltest Du sie wenigstens verlinken (das ist mit Referenz gemeint)
Hier noch ein anderer Beitrag zum Thema
R
Danke für die freundliche Aufklärung, habe bereits eine entsprechende Nachricht in dem anderen Forum gepostet. Werde sie hier jetzt aber nicht wiederholen, um nicht zum Wiederholungstäter zu werden. :wink:

Vielleicht als Verbesserungsvorschlag, denn jeder kann mal einen Fehler machen, aber niemand möchte unhöflich sein:

Bitte beachte folgendes zum Thema CROSSPOSTING

Der Beitrag ist wirklich nett geschrieben und verdeutlicht die Position beider Seiten.

Re: Makro automatisch ausführen, aber wie?

Verfasst: Mi, 19.12.2012 06:35
von F3K Total
Moin,
HHTiger hat geschrieben:2.) im selben Fenster dann <Extras> <Anpassen...>
Hier liegt der Fehler, du versuchst das Makro in der Basic Umgebung zuzuweisen.
Die Basic Umgebung weiss nicht, welchem Dokument du das Makro zuweisen möchtest, du könntest mehrere Dokumente offen haben.
Wechsle ins aktuelle Dokument (Test.ott) und dort unter Extras/Anpassen ...
Dann klappst auch mit dem Makro.

Gruß R

Re: Makro automatisch ausführen, aber wie?

Verfasst: Mi, 19.12.2012 13:18
von HHTiger
Hallo R ... moin, moin
danke für den Tipp. Kaum macht man etwas richtig und schon funzt es. Aber mal im Ernst, es scheint sich tatsächlich um 2 kleine "Bugs" zu handeln, denn der Dialog kann über mehrere Wege aufgerufen werden und
F3K Total hat geschrieben:Hier liegt der Fehler, du versuchst das Makro in der Basic Umgebung zuzuweisen.
Die Basic Umgebung weiss nicht, welchem Dokument du das Makro zuweisen möchtest, du könntest mehrere Dokumente offen haben.
es besteht im unteren Auswahl-Feld (ComboBox) "Speichern in" die Möglichkeit, das Dokument auszuwählen um genau das dem OO mitzuteilen.

1.) Bug: Aus dem aktuellen Dokument: <Extras><Makros><Makros verwalten><OpenOffice.org Basic ...>. In dem nun offenen Fenster "OpenOffice Basic Makros" kann man nun das richtig Dokument mit dem richtigen Makro auswählen (oder auch nicht, denn das ändert nichts an der weiteren Funktion) und anschliessend mit dem Button <Zuordnen...> in den Dialog "Anpassen" gehen. Dort ist nun in der unteren ComboBox "Speichern in" das richtige Dokument vorbelegt. Von daher ist OO schon bekannt, um welches Dokument es geht. Der Bug besteht nun meiner Meinung nach darin, dass bei einem Doppelklick auf das Ereignis nicht das zuvor ausgewählte Makro übernommen wird bzw. dass der sich öffnende Dialog "Makro-Selektor" nicht die Makros des ausgewählten Dokumentes auflistet.

2.) Bug: ähnlich funktioniert das auch aus der Basic Umgebung. Allerdings wird dort schon in ComboBox "Speichern in" nicht das oder die geöffneten Dokumente angeboten, obwohl es natürlich möglich wäre. (vorausgesetzt Bug 1 wäre bereinigt, dann sollten auch die nachfolgende Dialog richtig laufen)

btw: weiß zufällig jemand wo bzw. bei wem man diese Bugs melden könnte/sollte?

Gruß Klaus

Re: Makro automatisch ausführen, aber wie?

Verfasst: Mi, 19.12.2012 19:17
von F3K Total
Moin Tiijer,
HHTiger hat geschrieben:es besteht im unteren Auswahl-Feld (ComboBox) "Speichern in" die Möglichkeit, das Dokument auszuwählen um genau das dem OO mitzuteilen.
Ich versuche es mit meinen eigenen Worten zu erklären:
Es gibt einen Ort an dem der Makro Code gespeichert wird:
  • Makros/Module/Bibliotheken werden innerhalb eines Dokumentes gespeichert, Vorteil: die Makros sind immer dabei.
  • Makros/Module/Bibliotheken werden in OpenOffice (z.B. im Benutzerverzeichnis) gespeichert, Vorteil: gleiche Aufgaben in unterschiedlichen Dokumenten nutzen das gleiche Makro, Nachteil, ein an ein Dokumentereignis gebundenes Makro fehlt auf einem anderen Rechner.
Diesen Ort, und nur den Ort, wählst Du mit der Combobox "Speichern in" aus.

Und:
Es gibt Ereignisse, die die Makros ausführen.
  • Anwendungsereignisse, wie z.B Programmstart, Programmende. Diese werden unter Extras/Anpassen/Ereignisse im Programmfenster eingetragen. Genau hierhin kommst Du auch, wenn Du aus der Basic Umgebung auf Makro auswählen/zuordnen klickst, denn du befindest Dich auf Anwendungsebene.Anwendungereignisse sind also Dokumentunabhängig.
  • Dokumentereignisse, wie z.B. bei Dir Neues Dokument. Diese werden z.B. im Fenster einer Writerdatei unter Extras/Anpassen/Ereignisse eingetragen. Sie sind von diesem Dokument abhängig. Zugeordnete Makros werden bei dem gewählten Dokumentereignis ausgeführt.
  • Elementereignisse (z.B. eine Schaltfläche der du unter Kontrollfeld/Ereignisse ein Makro zur Ausführung zuordnen kannst.) Zugeornete Makros werden ausgeführt, wenn dem Element das gewählte Ereignis widerfährt
Aus meiner Sicht kann hier von einem Bug nicht die Rede sein.

Gruß und viel Erfolg beim weiterforschen
R

Re: Makro automatisch ausführen, aber wie?

Verfasst: Do, 20.12.2012 02:18
von HHTiger
Hallo R.,

Deine Erläuterungen waren zu meinem weiteren Verständnis sehr hilfreich.
F3K Total hat geschrieben:Es gibt einen Ort an dem der Makro Code gespeichert wird:
  • Makros/Module/Bibliotheken werden innerhalb eines Dokumentes gespeichert, Vorteil: die Makros sind immer dabei.
  • Makros/Module/Bibliotheken werden in OpenOffice (z.B. im Benutzerverzeichnis) gespeichert, Vorteil: gleiche Aufgaben in unterschiedlichen Dokumenten nutzen das gleiche Makro, Nachteil, ein an ein Dokumentereignis gebundenes Makro fehlt auf einem anderen Rechner.
Dieser Teil ist absolut richtig und das habe ich auch genau so verstanden. Der folgende Satz ist in diesem Zusammenhang allerdings falsch:
F3K Total hat geschrieben:Diesen Ort, und nur den Ort, wählst Du mit der Combobox "Speichern in" aus.
Denn mit der ComboBox "Speichern in" im Dialog "Anpassen" Reiter "Ereignisse" (siehe Anhang: Aus_OO_Dokument.png) wird lediglich der Speicherort der Verknüpfung zwischen Ereigniss und zugewiesenem Makro bestimmt (siehe Anhan: HilfeF1.png). NICHT der Speicherort des Makros selbst!

Bei dem nachfolgenden Absatz wird es etwas schwieriger. Grundsätzlich stimme ich Dir in vielen Dingen zu, allerdings nicht in allen. ich versuche einmal Dir zu verdeutlichen, wo unsere Meinungen auseinander gehen und warum ich trotzdem davon überzeugt bin, dass es sich um Bug's handelt.

Sechs Gründe vorweg, die für die von mir erwähnten Bug's sprechen:
1.) Egal über welchen Weg man den Dialog "Anpassen" aufruft (bisher habe ich 4 Wege gefunden) erscheint IMMER derselbe Dialog!
2.) Er heisst immer gleich, also KEINE Unterscheidung zwischen Programm Anpassen oder Dokument Anpassen.
3.) In der Hilfe gibt es nur eine einzige Beschreibung zu diesem Dialog (siehe Anhang: HilfeF1.png). Auch hier KEINE Unterscheidung, von WO aus der Dialog aufgerufen wurde!
4.) Egal wie oder von wo der Dialog aufgerufen wird, es werden immer ALLE Ereignisse (sowohl für Dokument als auch für Programm) angezeigt. Bitte nicht Ereignisse mit Speicherort verwechseln!!
5.) Die Unterscheidung zwischen Programm oder Dokument (Speicherort der Verknüpfung) findet über die ComboBox "Speichern in" statt. Und ausschliesslich hierüber!
6.) Nur wenn der Dialog von der Dokument Seite aus aufgerufen wird, hat man Zugriff auf alle Ereignisse aller (derzeit) verfügbaren Speicherorte (also sowohl Dokumente, als auch Programm!) Ausgenommen natürlich die auch später von Dir erwähnten "Elementereignisse".

Zum besseren Verständnis habe ich die folgenden Zitate etwas eingekürzt:
F3K Total hat geschrieben:Es gibt Ereignisse, die die Makros ausführen.
  • Anwendungsereignisse, wie z.B Programmstart, Programmende. ........Anwendungereignisse sind also Dokumentunabhängig.
Dem stimme ich zu 100% zu. Wenngleich es wenig sinnvoll erscheint, in dieser Situation Ereignisse aufzulisten / anzubieten, die sich NUR auf Dokumente anwenden lassen (allerdings bin ich mir hier jetzt nicht 100% sicher, ob wiklich welche dabei wären).
F3K Total hat geschrieben:[*]Dokumentereignisse, wie z.B. bei Dir Neues Dokument. ....... Sie sind von diesem Dokument abhängig. Zugeordnete Makros werden bei dem gewählten Dokumentereignis ausgeführt.[/list]
Das Beispiel ist etwas unglücklich gewählt (ich verstehe aber, was Du sagen möchtest), denn das Ereignis Neues Dokument kann natürlich auch ein Programmereignis sein. Entscheidend ist hier wieder wo die Verknüpfung gespeichert wird. Und dazu dient wiederum die ComboBox "Speichern in" in gleichem Fenster. Trotzdem wird auch in dieser Situation das Ereignis Programmstart angeboten. Da kann ich mir beim besten Willen nicht vorstellen, daß es in einem Dokument Sinn ergibt. Getestet habe ich das jedoch nicht.
F3K Total hat geschrieben:[*]Elementereignisse (z.B. eine Schaltfläche der du unter Kontrollfeld/Ereignisse ein Makro zur Ausführung zuordnen kannst.) Zugeornete Makros werden ausgeführt, wenn dem Element das gewählte Ereignis widerfährt[/list]
Dieser Part gehört glaube ich nicht zu dem Dialog "Anpassen". Denke mal Du hast den nur zur vollständige Übersicht mit angefügt.

Ich hoffe, ich konnte meinen Standpunkt ausreichend klar darstellen. Im Grundsatz widersprechen wir uns ja auch garnicht! Es ist lediglich so, daß Du davon ausgehst, es sei entscheidend von wo aus der Dialog aufgerufen wird (diese These wird jedoch weder im Dialog, noch in der Dokumentation unterrstützt) und ich behaupte, dass der Dialog, egal von wo aus er aufgerufen wird, auch immer gleich funktionieren sollte (die Begründung spiegelt sich in den 6 zuvor von mir genannten Gründen wieder).

Gruß Klaus

Nachtrag: Dateien jetzt angehängt

Re: Makro automatisch ausführen, aber wie?

Verfasst: Do, 20.12.2012 02:29
von HHTiger
Konnte die zitierten Anhänge leider nicht mitschicken. Es gibt die Fehlermeldung: "Das Kontingent für Dateianhänge ist bereits vollständig ausgenutzt." Was auch immer das bedeuten mag. :(

Egal, die Anhänge sollten sein:

1. Aus_OO_Dokument.png => Screenshot des Dialoges "Anpassen" von der Dokument-Seite aufgerufen mit einem offenen Dokument.
2. HilfeF1.png => Screenshot der Hilfe-Datei, die durch Drücken der F1-Taste bei geöffnetem Dialog "Anpassen" erscheint.

Kann also von jedem selbst nachvollzogen werden.

Re: Makro automatisch ausführen, aber wie?

Verfasst: Do, 20.12.2012 07:01
von Stephan
Die Tatsache, daß es aber funktioniert kommt meiner Meinung nach daher, daß Du überall die Standard-Vorgaben benutzt.
Nein, und hätte Du Deine Vermutung überprüft hättest du das eigentlich merken müssen.
Von der Vorgehensweise müßte es eigentlich folgendermaßen funktionieren:
Das ist richtig, aber es funktioniert trotzdem nicht weil dort ein Programmfehler ist. Du mußt den Dialog zum Zuweisen über Extras-Anpassen-Ereignisse aufrufen, nicht über den von Dir beschriebenen Weg, dann wird die ZUweisung funktionieren bzw. möglich sein.
Da z.B. OpenOffice-BASIC über den nahezu identischen Befehlssatz wie VB oder VBA verfügt und sich hauptsächlich in der API von VBA unterscheidet, kann man hier durchaus von einem "Abkömmling" sprich Derivat von VB oder VBA sprechen.
Nein, das kann man nicht, denn dazu müßte es davon abstammen, denn "abstammen" heißt ja nun einmal nicht gleich oder ähnlich sein, sondern abstammen.
z.B. mögen MS Word 2000 und OOo Writer ähnlich aussehen und funktionieren, nur stammt keines vom Anderen ab, hingegen stammt z.B. go-oo von OOo ab.



Gruß
Stephan