DE/Doku/Allgemein/13 Makros
Ihr erstes Makro
Ein vorhandenes Makro hinzufügen
Kü | Ralf | (Name) | (Name) |
Kü (neu!) | Nino, k-j | Jochen | k-j |
Der erste Schritt, Makroprogrammierung zu erlernen, ist, vorhandene Makros zu finden und zu benutzen. Im Folgenden gehen wir davon aus, dass Ihnen ein Quelltext eines Makro vorliegt. Es spielt keine Rolle, ob das Makro aus dem Internet, einer E-Mail, einem Office-Dokument oder aus diesem Buch stammt. Wir beginnen mit dem Beispiel aus Listing 1. Listing 1: Sub HalloWelt Print „Hallo“ End Sub Um dieses Makro auszuführen, müssen Sie es zunächst in einem sogenannten Modul abspeichern. Module sind wiederum in Bibliotheken zusammengefasst. Bibliotheken werden wiederum in Bibliothekscontainern gespeichert. Weitergehende Informationen finden Sie im Abschnitt „Organisieren Sie Ihre Makros“ auf Seite XY. Zum Erstellen der Bibliothek, die Ihr Makro aufnehmen soll, verfahren Sie wie folgt:
Beim Anlegen eines neuen Moduls wird automatisch ein leeres funktionsloses Makro namens „Main“ angelegt. Listing 2: Sub Main End Sub Fügen Sie Ihr neues Makro entweder vor der Zeile „Sub Main“ oder nach der Zeile „End Sub“ ein. Im Listing 3 wurde das neue Makro vor „Sub Main“ eingefügt. Listing 3: REM ***** BASIC ***** Sub HalloWelt Print „Hallo“ End Sub Klicken Sie auf das Ausführen-Symbol Image in der Werkzeugleiste oder drücken Sie die Taste F5, um das oberste Makro aus dem Modul auszuführen. Mithilfe des Dialogs LibreOffice Basic Makros, den Sie entweder mittels Makro auswählen-Symbol Image oder über den Menübefehl ▸ ▸ ▸ aufrufen können, können Sie auf jedes beliebige Makro in einem Modul zugreifen und es ausführen. |
Einfaches Makro selbst erstellen
Kü (neu!) | Nino | Jochen | k-j |
Für die wiederholte Eingabe von identischen Informationen können Sie die Zwischenablage benutzen. Aber die Zwischenablage wird bei jeder neuen Nutzung verändert, so dass Ihre Information unter Umständen verloren geht. Wenn Sie die Information als Makro speichern, können Sie diese unkompliziert wiederverwenden. In vielen einfachen Fällen - wie auch in unserem Beispiel - können Sie statt eines Makros ebenso auch einen AutoText verwenden. Uns kommt es hier aber auf den beispielhaften Einsatz von Makros an.
Wenn Sie alle Schritte wie beschrieben ausgeführt haben, enthält die Standard-Bibliothek nun ein Modul namens „Aufgenommen“, welches das Makro namens „LibO-Schriftzug“ enthält (siehe Abb. 3). Hier sieht man auch das beim Erstellen des Moduls automatisch hinzugefügte Makro namens „Main“. |
Makro ausführen
Kü (neu!) | Nino | k-j | Jochen |
Öffnen Sie mittels ▸ ▸ den Makro-Selektor-Dialog. Wählen Sie das oben erstellte Makro aus und klicken Sie auf die Schaltfläche Ausführen.Image Makros können auch auf andere Weise ausgeführt werden. So können Sie zum Beispiel über ▸ ▸ ▸ den Makro-Verwaltungsdialog aufrufen, der ebenfalls ein Ausführen-Symbol enthält. Wenn Sie im Verwaltungsdialog auf Verwalten klicken, starten Sie den "Makro Organizer". Dieser Dialog öffnet gewöhnlich schneller. Allerdings ist die Auswahl ist etwas langsamer. |
Makro-Code ansehen und bearbeiten
Kü (neu!) | Nino | Erhardt | k-j |
Öffnen Sie den Dialog LibreOffice Basic Makros mittels ▸ ▸ ▸ . Wählen Sie das weiter oben gespeicherte Makro aus und klicken Sie auf Bearbeiten. Die Basic-IDE öffnet sich und das Makro kann hier bearbeitet werden.Listing 4: Dieser Makro-Code wurde durch die Aufzeichnung erzeugt Das Makro in Listing 4 sieht komplizierter aus als es ist. Die nachfolgenden Erklärungen werden Ihnen helfen, die meisten der verwendeten Befehle der Reihe nach zu verstehen. Wenn Sie sich nicht für die Details interessieren, können Sie den Text „LibreOffice“ durch einen beliebigen anderen Text austauschen – dieser Text wird stattdessen beim Ausführen des Makros eingefügt. |
Kommentare starten mit REM
Kü (neu!) | Nino | Erhardt | k-j |
Das Schlüsselwort REM, eine Abkürzung des englischen Wortes für remark (Anmerkung) leitet einen Makro-Kommentar ein. Der Rest der Zeile nach dem Wort REM wird ignoriert. Alternativ kann auch ein einfaches Anführungszeichen oben (') zur Kennzeichnung von Kommentaren benutzt werden.
|
Subroutinen mit SUB festlegen
Kü (neu!) | Nino | Erhardt | k-j |
Routinen (oder Prozeduren) werden durch das Schlüsselwort SUB eingeleitet. Einzelne Makros werden in Routinen gespeichert, die mit SUB beginnen. Das Ende einer Routine wird durch die Zeile END SUB gekennzeichnet. Der Code beginnt mit der Definition der Routine namens Main, die leer ist und nichts bewirkt. Die nächste Routine, zum Beispiel LibOSchriftzug, enthält den generierten Code.
|
Variablendefinition mittels DIM
Kü (neu!) | Nino | Erhardt | k-j |
Um eine Information für eine spätere Verwendung zu speichern, können Sie sie auf ein Stück Papier schreiben. Auch eine Variable enthält eine Information, die später gelesen oder verändert werden kann. Der DIM-Befehl ähnelt einem Stück Papier, das sie auf Ihren Schreibtisch legen, um später darauf eine Information oder eine Nachricht zu vermerken. Das Makro LibOSchriftzug definiert die Variablen document und dispatcher vom Typ Objekt. Variablen können auch vom Typ String, Integer oder Date sein. Weiter unten wird noch eine weitere Variable, args1, als Feld (array) von Property-Werten definiert. Variablen vom Typ array können mehrere unterschiedliche Werte enthalten, ähnlich wie unterschiedliche Blätter in einem einzigen Ordner zusammengefasst werden können. Die Werte eines Arrays sind aufsteigend nummeriert und beginnen mit 0. In unserem Fall gibt es nur einen Wert, daher bleibt es bei der 0 in den eckigen Klammern. |
Das Makro im Zusammenhang
Kü (neu!) | Nino | Erhardt | k-j |
Vorab: Für das Gesamtverständnis ist es nicht unbedingt erforderlich, alle der im Folgenden beschriebenen Details zu verstehen. Die erste Zeile definiert den Start des Makro: sub LibOSchriftzug Dann werden 2 Variablen deklariert: dim document as object ThisComponent bezieht sich auf das aktuelle Dokument. Die Dokumenteigenschaft (Property) CurrentController referenziert einen Dienst, der das Dokument sozusagen „kontrolliert“. Wenn Sie zum Beispiel etwas eingeben, dann „bemerkt“ das der Current Controller. Der Current Controller schickt (dispatch) dann die Änderungen an den Dokumentrahmen (Frame). Die Property Frame eines Controllers ergibt den Hauptframe für ein Dokument. Daher referenziert die Variable document in der folgenden Zeile den Dokumentrahmen, der die verschickten Befehle erhält. document = ThisComponent.CurrentController.Frame
Die meisten Aufgaben in LibreOffice werden durch ein Kommando, welches abgeschickt (dispatched) wird, ausgeführt. LibreOffice enthält einen Dienst namens DispatchHelper, der den größten Teil der Dispatch-Arbeit erledigt, wenn in Makros Dispatch-Befehle verwendet werden. Die Methode CreateUnoService akzeptiert den Namen eines Dienstes (Service) und versucht, eine Instanz dieses Dienstes zu erzeugen. Nach der Ausführung enthält die Variable dispatcher eine Referenz zu einem DispatchHelper. dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") Dann wird ein Feld (Array) von Eigenschaften (Properties) deklariert. Jede Property hat einen Namen und einen Wert, es handelt sich also um ein Namen/Werte-Paar. Das hier erzeugte Feld besitzt eine Property mit Index Null. dim args1(0) as new com.sun.star.beans.PropertyValue Dann wird die Property mit dem Namen „Text“ sowie dem Wert „LibreOffice“ versehen: args1(0).Name = "Text" Der DispatchHelper schickt mit dem Kommando uno:InsertText einen Dispatch an den Dokumentrahmen, der in der Variable Dokument gespeichert ist. Die Erklärung der Bedeutung der beiden Argumente „Rahmennummer“ und „Suchflags“ würde diese Einführung sprengen. Das letzte Argument schließlich ist das Feld mit den Property-Werten, die bei der Ausführung des Befehls InsertText benutzt werden sollen. dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1()) Als letztes wird die Routine beendet: end sub
|
Makro erstellen
Kü (neu!) | k-j | Erhardt | Jochen |
Vor Erstellung eines Makros ist es wichtig, sich zwei Fragen zu stellen:
|
Die integrierte Entwicklungsumgebung
k-j | k-j | Jochen | Erhardt |
Eine integrierte Entwicklungsumgebung (Integrated development environment, kurz IDE) ist eine Zusammenstellung von Programmierwerkzeugen, um die Erstellung von Software zu vereinfachen. LibreOffice enthält sehr leistungsfähige Werkzeuge, mit denen Sie Ihre Makros ausführen, bearbeiten und Fehler darin finden können. Abbildung xyz zeigt Ihnen die wichtigsten Elemente der LibreOffice-IDE. Der große Bereich in der Mitte, in dem der Makrocode angezeigt wird, ist das Editor-Fenster. Viele Funktionen wie Stopp, Haltepunkt, Einzelschritt und das Beobachtungsfenster dienen als einfacher und effektiver Debugger für Makrocode.
|
Ein umfangreicheres Beispiel
Kü (neu!) | k-j | Erhardt | Jochen |
Als komplizierteres Beispiel für die Aufnahme eines Makros mit dem Makrorekorder werden aus Webseiten Zeilen und Spalten von Datensätzen kopiert und als Tabellen in einem Textdokument eingefügt. Zuerst kopiert man die Tabelle von der Website in die Zwischenablage. Um seltsame Formatierungen und Schriftarten zu vermeiden, wird der Text als unformatierter Text in ein Writer-Dokument eingefügt. Dann wird der Text mit Tabulatoren zwischen den Spalten neu formatiert, so dass der Befehl ▸ ▸ verwendet werden kann, um den Text in eine Tabelle zu konvertieren.Danach wird der Text überprüft, ob dafür ein Makro aufgenommen werden kann, um den Text einfach zu formatieren. Als ein Beispiel soll die FontWeight-Konstanten-Gruppe aus der API-Webseite dienen. Die erste Spalte gibt den Namen der Konstanten an. Jedem Namen folgt ein Leerzeichen und ein Tabulator. Die erste Spalte soll den beinhalteten numerischen Wert, die zweite Spalte den Namen und die dritte Spalte die Beschreibung enthalten. Eine kurze Kontrolle ergibt, dass alle Zeilen außer DontKnow und NORMAL einen numerischen Wert haben. Es wird für diese beiden Zeilen die Werte 0 und 100 festgelegt und manuell eingeben. Die Daten können auf verschiedene Weisen bereinigt werden – dabei sind alle von ihnen leicht. Das erste Beispiel verwendet Tastenanschläge, um den Cursor an den Anfang der Zeile mit dem Text THIN zu setzen.
Es dauert viel länger, die Schritte zu lesen und zu schreiben als das Makro aufzeichnen. Arbeiten Sie langsam und denken Sie über die Schritte nach, die Sie tun. Mit der Praxis geht das in Fleisch und Blut über. Das erzeugte Makro wurde so geändert, dass die Nummerierungen in den Kommentaren den oberen Schritten entsprechen. sub CopyNumToCol1 rem ------------------------------------------------------------- rem Variablen definieren dim document as object dim dispatcher as object dispatcher as object rem ------------------------------------------------------------- rem Zugang zum Dokument erhalten document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") = createUnoService("com.sun.star.frame.DispatchHelper") rem (2) Strg + Pfeil nach rechts drücken, um den Cursor an den Anfang des "specifies" zu bewegen. dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array()) rem (3) Rücktaste zweimal drücken, um den Tabulator und das Leerzeichen zu löschen. dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array()) rem ------------------------------------------------------------- dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array()) rem (4) Tabulator drücken, um einen Tabulator ohne Leerzeichen nach dem Namen der Konstanten hinzuzufügen. dim args4(0) as new com.sun.star.beans.PropertyValue args4(0).Name = "Text"(0).Name = "Text" args4(0).Value = CHR$(9) dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args4()) rem (5) Löschen drücken, um den Kleinbuchstaben s zu löschen und .... dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array()) rem (5) ... dann S eingeben. dim args6(0) as new com.sun.star.beans.PropertyValue args6(0).Name = "Text"(0).Name = "Text" args6(0).Value = "S" dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args6()) rem (6) Strg + Pfeil nach rechts zweimal drücken, um den Cursor an den Anfang der Zahl zu bewegen. dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array()) rem ------------------------------------------------------------- dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array()) rem (7) Strg + Umschalt + Pfeil nach rechts drücken, um die Zahlen zu auszuwählen. dispatcher.executeDispatch(document, ".uno:WordRightSel", "", 0, Array()) rem (8) Strg + C drücken, um den ausgewählten Text in die Zwischenablage zu kopieren. dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array()) rem (9) Ende drücken, um den Cursor an das Ende der Zeile zu bewegen. dispatcher.executeDispatch(document, ".uno:GoToEndOfLine", "", 0, Array()) rem (10) Rücktaste zweimal drücken, um die beiden Leerzeichen zu entfernen. dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array()) rem ------------------------------------------------------------- dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array()) rem (11) Pos1 drücken, um den Cursor an den Anfang der Zeile zu bewegen. dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array()) rem (12) Strg + V dürcken, um die ausgewählte Zahl am Anfang der Zeile einzufügen. dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array()).executeDispatch(document, ".uno:Paste", "", 0, Array()) rem (13) Rücktaste drücken, um das Leerzeichen zu entfernen. dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array()) rem (14) Tabulator drücken, um einen Tabulator zwischen Zahl und Name einzufügen. dim args17(0) as new com.sun.star.beans.PropertyValue args17(0).Name = "Text"(0).Name = "Text" args17(0).Value = CHR$(9) dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args17()) rem (15) Pos1 drücken, um zum Anfang der Zeile zu gelangen. dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array()) rem (16) Pfeil nach unten drücken, um den Cursor in die nächste Zeile zu bewegen. dim args19(1) as new com.sun.star.beans.PropertyValue args19(0).Name = "Count"(0).Name = "Count" args19(0).Value = 1 args19(1).Name = "Select" args19(1).Value = false dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args19()).executeDispatch(document, ".uno:GoDown", "", 0, args19()) end sub Cursor-Bewegungen werden (im Gegensatz zur Suche) für alle Operationen verwendet. Wenn das Makro bei der DontKnow-Zeile angelangt, wird das Wort „weight“ an den Anfang der zeile bewegt, und das erste "The" durch "She" geändert. Dies ist nicht perfekt, daher sollte das Makro für die Zeilen nicht laufen, die nicht das notwendige Format haben. Vielmehr sollten diese manuell geändert werden. |
Schnelles Ausführen eines Makros
Kü (neu!) | k-j | Jochen | Erhardt |
Wenn Sie ein Makro entwickeln, ist es mühsam, immer wieder das Makro über ▸ ▸ (siehe Abbildung xyz) laufen zu lassen. Das Makro kann aus der IDE (integrierten Entwicklungsumgebung) ausgeführt werden. Verwenden Sie ▸ ▸ ▸ und öffnen Sie den Basic-Makro-Dialog.Wählen Sie das Makro und klicken Sie auf Bearbeiten, um das Makro im IDE zu öffnen. Die IDE hat ein "Basic-Programm ausführen"-Symbol in der Symbolleiste, das als erstes Makro in der IDE läuft. Sofern Sie das erste Makro nicht ändern, ist es das leere Makro mit dem Namen Main. Ändern Sie Main, so dass es wie in Listing xyz dargestellt lautet Sub Main :CopyNumToCol1 End Sub Jetzt können Sie das Makro "CopyNumToCol1" durch wiederholtes Klicken auf das "Basic-Programm ausführen"-Symbol in der Symbolleiste des IDE laufen lassem. Dies ist sehr einfach und schnell - vor allem für temporäre Makros, die ein paar Mal verwendet und dann verworfen werden. |
Bekannte Probleme mit dem Makrorekorder
Kü (neu!) | k-j | Erhardt | Jochen |
Die Makroaufzeichnung ist leider relativ fehleranfällig. Hauptgrund ist der Dispatch framework bzw. seine Beziehung zum Makrorekorder. |
Dispatch Framework: was ist das?
Kü (neu!) | k-j | Erhardt | Jochen |
Der Zweck des Dispatch Frameworks ist es, einen einheitlichen Zugang zu den LibreOffice-Komponenten für Befehle zu schaffen, die in der Regel den Menüpunkten entsprechen. Man kann ▸ aus dem Menü, die Tastenkombination Strg + S oder das Speichern-Symbol in der Werkzeugleiste verwenden, um ein Dokument zu speichern. Alle diese Befehle sind im gleichen "Dispatchbefehl" übersetzt.Der Dispatch Framework kann auch verwendet werden, um "Befehle" zurück an das UI (User Interface) zu geben. Zum Beispiel wird nach dem Speichern des Dokuments der "Datei speichern"-Befehl deaktiviert. Sobald das Dokument geändert wurde, wird der Befehl Speichern wieder aktiviert. Beispiele für einen Dispatchbefehl sind .uno:InsertObject oder .uno:GoToStartOfLine. Der Befehl wird an den Rahmen des Dokuments gesendet und der Rahmen übergeht diesen Befehl, bis ein Objekt gefunden wird, das den Befehl behandeln kann. |
Wie der Makrorekorder den Dispatch Framework verwendet
Kü (neu!) | k-j | Erhardt | Jochen |
Der Makrorekorder zeichnet die generierten Meldungen auf. Der Rekorder ist relativ einfach zu implementieren und die gleichen Befehle, die ausgegeben werden, werden für eine spätere Verwendung aufgezeichnet. Das Problem ist, dass nicht alle übertragenen Befehle vollständig sind. Zum Beispiel erzeugt das Einfügen eines Objektes folgenden Code: dispatcher.executeDispatch(document, ".uno:InsertObject", "", 0, Array()) Es ist nicht möglich, festzulegen, welche Objekt-Art zu erstellen oder einzufügen ist. Wenn ein Objekt aus einer Datei eingefügt werden soll, kann nicht festgelegt werden, welche Datei benutzt werden soll. Wenn Sie versuchen, ein Makro aufzunehmen und dabei mit ▸ die Optionen zu öffnen und Konfikurationseinstellungen zu ändern, nimmt das erstellte Makro keine Konfigurationsänderungen auf. Der generierte Code ist auskommentiert, so dass das Makro auch nicht korrekt ablaufen kann.rem dispatcher.executeDispatch(document, ".uno:OptionsTreeDialog", "", 0, Array()) Wenn ein Dialog geöffnet ist, wird der Befehl, der den Dialog öffnet, wahrscheinlich auch erzeugt werden. Alle Einstellungen innerhalb des Dialogs werden gewöhnlich nicht aufgezeichnet. Beispiele hierfür sind der Makroorganisationsdialog, der Dialog "Einfügen von Sonderzeichen" und ähnliche Dialogarten. Andere mögliche Probleme mit dem Makrorekorder können das Einfügen einer Formel, die Einrichtung von Anwenderdaten, das Setzen von Calc-Filtern, Aktionen in Datenbankformularen und Exportieren eines Dokumentes in ein verschlüsseltes PDF sein. Sie werden erst mit dem Ausprobieren herausfinden können, was funktioniert. Die Aktionen aus dem Suchdialog werden zum Beispiel richtig erfasst. |
Weitere Möglichkeiten
Kü (neu!) | k-j | Jochen | Erhardt |
Wenn der Makro-Rekorder nicht in der Lage ist, ein bestimmtes Problem zu lösen, ist die übliche Lösung, den Code durch Nutzung der LibreOffice-Objekte zu schreiben. Leider ist die Programmierung für Objekte am Anfang nicht einfach. Es ist normalerweise am besten, mit einfachen Beispielen zu beginnen und diese dann langsam entsprechend Ihren Erfahrungen verästeln zu lassen. Bereits generierte Makros zu lesen und nachzuvollziehen ist ein guter Einstieg. |
Makroorganisation
Kü (neu!) | k-j | Erhardt | Jochen |
In LibreOffice werden Makros in Module, die Module in Bibliotheken und Bibliotheken in Container gruppiert. Eine Bibliothek wird gewöhnlich als Übergruppierung entweder für eine Sammlung von Makros oder für eine ganze Anwendung verwendet. Module werden gewöhnlich in Funktionen wie zum Beispiel Benutzereingaben und Berechnungen unterteilt. Individuelle Makros sind Subroutinen und Funktionen. Ein Informatiker würde die Abbildung XYZ verwenden, um die Situation genau zu beschreiben. Der Text "1..*" meint eins oder mehr und "0..*" meint Null oder mehr. Das schwarze Dreieck meint bestehend aus oder enthält.
Verwenden Sie Extras → Makros → Makros verwalten → LibreOffice Basic, um den LibreOffice Basic Makros-Dialog zu öffnen (siehe Abbildung xyz). Es werden alle verfügbaren Bibliothekscontainer in der „Makro aus“-Liste angezeigt. Jedes Dokument ist ein Bibliothekscontainer, der in der Lage ist, mehrere Bibliotheken aufzunehmen. Die Anwendung selbst fungiert als zwei Bibliothekscontainer: ein Bibliothekscontainer für Makros, die mit LibreOffice geliefert werden ("LibreOffice Makros") und ein Bibliothekscontainerfür die persönlichen Makros (" Meine Makros"). Wie in Abbildung xyz gezeigt, sind nur zwei Dokumente geöffnet. Die LibreOffice-Makros sind mit dem Runtime-Code der Anwendung gespeichert, die normalerweise nicht bearbeitet werden können, solange Sie nicht als Administrator angemeldet sind. Dies ist auch gut so, da diese Makros nicht geändert werden sollen, und Sie sollten Ihre eigenen Makros nicht im LibreOffice-Container speichern. Solange Sie Ihre Makros für ein einzelnes Dokument, und nur in einem einzigen Dokument, benutzbar machen, werden Ihre Makros am sinnvollsten im Meine Makros-Container gelagert. Der "Meine Makros-Container" ist in Ihrem Benutzerbereich oder Home-Verzeichnis gespeichert. Wenn ein Makro in einem Dokument enthalten ist, wird ein aufgezeichnetes Makro versuchen, in diesem Dokument zu arbeiten - vor allem wenn es "ThisComponent" für seine Aktionen benutzt. Jeder Bibliothekscontainer enthält eine Bibliothek namens Standard. Es ist besser, eigene Bibliotheken mit aussagekräftigeren Namen als die Standard-Bibliothek zu verwenden. Diese Namen sind nicht nur einfacher zu verwalten, sondern Sie können diese auch in andere Bibliothekscontainer importieren, während die Standard-Bibliothek nicht importiert werden kann.
Genauso ist es ratsam, aussagekräftige Namen für Ihre Module zu verwenden. Standardmäßig verwendet LibreOffice Namen wie Module1. Fühlen Sie sich frei, Ihre eigenen aussagekräftigen Namen zu verwenden. Wenn Sie Makros erstellen, müssen Sie auch entscheiden, wo diese abgespeichert werden sollen. Das Abspeichern eines Makros in einem Dokument ist dann nützlich, wenn das Dokument weiter gegeben wird und Sie wollen, dass das Makro im Dokument enthalten ist. Makros, die im Anwendungsbibliothekscontainer namens "Meine Makros" gespeichert sind, sind dagegen global für alle Dokumente verfügbar. Makros sind erst dann verfügbar, wenn die Bibliothek, die sie enthält, geladen ist. Die Standard-Bibliothek und Template-Bibliothek werden jedoch automatisch geladen. Eine geladene Bibliothek wird anders als eine Bibliothek, die nicht geladen ist, angezeigt. Um die Bibliothek und die enthaltenen Module zu laden, klicken Sie doppelt auf die Bibliothek. |
Wo werden Makros gespeichert?
Kü (neu!) | k-j | Erhardt | Jochen |
LibreOffice speichert benutzerspezifische Daten in ein Verzeichnis unter dem Benutzerverzeichnis. Die Lage des Benutzerverzeichnis ist abhängig von dem verwendeten Betriebssystem. Verwenden Sie Extras → Optionen → LibreOffice → Pfade, um zu sehen, wo andere Konfigurationsdaten gespeichert werden. User-Makros sind in LibreOffice\3\user\basic gespeichert. Jede Bibliothek ist in einem eigenen Verzeichnis unterhalb des Basisverzeichnisses gespeichert. Es ist für den gelegentlichen Gebrauch nicht wichtig zu verstehen, wo Makros gespeichert werden. Wenn Sie aber wissen, wo sie gespeichert sind, können Sie eine Sicherungskopie erstellen, Ihre Makros weitergeben oder überprüfen, ob ein Fehler vorhanden ist. Gerade wenn ein Makro einen Fehler enthält, können Sie das Makro jemandem schicken, der Ihnen eventuell bei der Fehlersuche helfen kann. Verwenden Sie Extras → Makros → Dialoge verwalten, um den LibreOffice Makro-Verwaltungsdialog zu öffnen. Eine weitere gängige Methode, um diesen Dialog zu öffnen, ist über Extras → Makros → Makros verwalten → LibreOffice Basic das LibreOffice Dialogfeld Makros zu öffnen und dann auf die Verwalten-Taste zu klicken. |
Makros importieren
Kü (neu!) | k-j | Erhardt | Jochen |
Der "Makro verwalten"-Dialog bietet Funktionen zum Erstellen, Löschen und Umbenennen von Bibliotheken, Modulen und Dialogen. Wählen Sie den Bibliothek-Container und klicken Sie dann auf die Schaltfläche Importieren, um Makro-Bibliotheken zu importieren (siehe Abbildung xyz).
Gehen Sie zu dem Verzeichnis, das die Bibliothek enthält, die Sie importieren möchten. Normalerweise gibt es zwei Dateien zur Auswahl: dialog.xlb und script.xlb. Es spielt keine Rolle, welche der beiden Dateien Sie wählen, da beide Dateien importiert werden. Wählen Sie eine Datei und klicken Sie auf Öffnen, um fortzufahren. Wenn die Bibliothek bereits vorhanden ist, wird sie nicht ersetzt, es sei denn „Existierende Bibliotheken ersetzen“ ist markiert. Wenn „Als Referenz einfügen (nur lesen)“ aktiviert ist, wird die Bibliothek an ihrem aktuellen Speicherort referenziert, aber Sie können diese nicht bearbeiten. Wenn „Als Referenz einfügen (nur lesen)“ nicht aktiviert ist, wird die Bibliothek in das Makroverzeichnis des Benutzers kopiert. Makros können in Bibliotheken innerhalb von LibreOffice-Dokumenten gespeichert werden. Wählen Sie ein Dokument anstelle eines Verzeichnis auf der Festplatte (wie in Abbildung xyz gezeigt), um die in einem Dokument enthaltenen Bibliothek zu importieren. |
Makros für den Import herunterladen
Kü (neu!) | k-j | Jochen | Erhardt |
Makros stehen auch zum Herunterladen zur Verfügung. Einige Makros werden in Dokumenten, manche als reguläre Dateien, die Sie auswählen und importieren müssen, und einige als Makrotext bereit gestellt, der in die Basic IDE kopiert und eingefügt werden soll. Verwenden Sie Extras → Makros → Makros verwalten → LibreOffice Basic, um den LibreOffice Makrodialog zu öffnen. Wählen Sie das Makro, um es zu bearbeiten, und klicken Sie dann auf Bearbeiten, um das Makro in der Basic IDE zu öffnen. Einige Makros sind als kostenlose Downloads im Internet (siehe Abbildung xyz). "Ein vorhandenes Makros hinzufügen" auf Seite XYZ beschreibt, wie Sie diese Makros Ihrer Makrobibliothek hinzuzufügen. http://www.ooomacros.org/ (archived at the Wayback Machine)
http://www.pitonyak.org/oo.php
http://development.openoffice.org/
|
Wie man ein Makro ausführt
Kü (neu!) | k-j | Erhardt | Jochen | ||||||||||||||||||||
Eine typische Methode, um ein Makro auszuführen, ist im Folgenden beschrieben:
Obwohl Sie Extras → Makros → Makro ausführen jedes Mal benutzen können, um Makros auszuführen, ist dies keine effiziente Vorgehensweise für häufig genutzte Makros. Sinnvoller ist es hierfür, ein Makro einer Symbolleiste, einem Menüpunkt, einem Tastaturkürzel oder einer Schaltfläche, die in einem Dokument eingebettet ist, zuzuweisen. Bei der Auswahl einer Methode ist es auch gut, sich folgende Fragen zu stellen:
Die Antworten werden bestimmen, wo das Makro gespeichert und wie es zugänglich gemacht wird. Sie werden zum Beispiel ein selten verwendetes Makro wahrscheinlich nicht in einer Symbolleiste einfügen. Um Sie bei Ihrer Wahl zu unterstützen haben wir folgende Tabelle XYZ erstellt:
Um einen Menüpunkt, Tastenkombination oder ein Symbol in der Symbolleiste für den Makroaufruf einzufügen, verwenden Sie das Dialogfenster Anpassen (siehe Abbildung xyz). Öffnen Sie diesen Dialog mit einer der folgenden Arten:
Der Dialog Anpassen enthält die Register Menüs, Tastatur, Symbolleisten und Ereignisse. Weitere Erklärungen bezüglich des Dialogs finden Sie im Kapitel 14 Anpassen von LibreOffice. |
Werzeugleiste
Kü (neu!) | Ralf | Erhardt | k-j |
Makros können den Werkzeugleisten hinzugefügt werden. Einzelheiten hierzu siehe Kapitel 14, Anpassen von LibreOffice. |
Menüeintrag
Kü (neu!) | Ralf | Erhardt | k-j |
Über Extras -> Anpassen wird der Dialog 'Anpassen' geöffnet, dort wählen Sie den Reiter 'Menü'. Sie können dann einen vorhandenen Menüeintrag bearbeiten oder neue Menüeinträge zum Aufruf von Makros erstellen. Weitere Informationen zur Menüanpassung siehe Kapitel 14, Anpassen von LibreOffice. |
Tastaturkürzel
Kü (neu!) | Ralf | Erhardt | k-j |
Über Extras ->Anpassen wird der Dialog 'Anpassen' geöffnet, dort wählen Sie den Reiter 'Tastatur'. Einzelheiten zur Zuweisung von Tastaturkürzeln siehe Kapitel 14, Anpassen von LibreOffice. |
Ereignis
Kü (neu!) | k-j | Erhardt | Jochen |
Wenn in LibreOffice etwas passiert, spricht man von einem Ereignis oder englisch Event. Ereignisse treten zum Beispiel auf, wenn ein Dokument geöffnet, eine Taste gedrückt oder die Maus bewegt wird. LibreOffice ermöglicht es, Ereignissen ein Makro zuzuordnen, wenn das Ereignis eintritt. Das Makro wird dann Event-Handler genannt. Die vollständige Beschreibung von Event-Handlar geht weit über den Rahmen dieses Handbuches hinaus. Hier soll nur ein kleiner Einblick gegeben werden.
Verwenden Sie Extras -> Anpassen, um den Dialog zu öffnen und wählen Sie die Registerkarte Ereignisse (siehe Abbildung XYZ). Die Ereignisse im Dialog Anpassen beziehen sich auf die gesamte Anwendung und bestimmte Dokumente. Verwenden Sie das Feld 'Speichern in', um LibreOffice oder ein bestimmtes Dokument zu wählen. Viele Anwender weisen zum Beispiel dem "Dokument öffnen"-Ereignis das Starten eines bestimmten Makros zu. Das Makro führt dann bestimmte Setup-Aufgaben für das Dokument durch. Wählen Sie das gewünschte Ereignis und klicken Sie auf die Makrotaste, um den Makro-Auswahldialog zu öffnen. Abbildung XYZ Wählen Sie das gewünschte Makro und klicken Sie auf OK, um das Makro dem Ereignis zuzuordnen. Die Registerkarte Ereignisse zeigt, dass ein Makro einem Ereignis zugeordnet wurde (siehe Abbildung XYZ). Wenn in dem aufgeführten Beispiel ein Dokument geöffnet wird, wird das PrintHello-Makro ausgeführt. Viele Objekte in einem Dokument können dazu verwendet werden, ein Makro aufzurufen, wenn ein bestimmtes Ereignis eintritt. Die häufigste Verwendung ist ein Steuerelement einzufügen, z. B. eine Schaltfläche in einem Dokument. Bei einem Doppelklick auf eine Grafik öffnet sich ein Dialog mit einer Registerkarte Makro, so dass Sie einem Ereignis ein Makro zuweisen können. |
Extensions
Kü (neu!) | k-j | Erhardt | Jochen |
Eine Erweiterung ist ein Paket, das in LibreOffice installiert werden kann, um neue Funktionen hinzuzufügen. Erweiterungen können in fast jeder Programmiersprache geschrieben werden und können einfach oder anspruchsvoll sein. Erweiterungen können in folgende Gruppen unterteilt werden:
Weitere Informationen , wie Sie Erweiterungen erhalten und installieren, finden Sie in Kapitel 14, Anpassen von LibreOffice. |
Makros schreiben ohne Recorder
Kü (neu!) | k-j | Ralf | Erhardt |
Die Beispiele, die in diesem Kapitel gezeigt werden, wurden mit dem Makrorekorder oder dem Dispatcher erstellt. Sie können auch Makros schreiben, die direkt auf die Objekte zugreifen, die in LibreOffice enthalten sind. Mit anderen Worten, Sie können ein Dokument direkt beeinflussen. Die internen Objekte von LibreOffice direkt zu beeinflussen ist ein Thema für Fortgeschrittene, das über den Rahmen dieses Kapitels hinausgeht. Ein einfaches Beispiel zeigt allerdings, wie dies grundsätzlich funktioniert: Listing 7: Hängt den Text "Hallo" an das Ende des Dokuments
|
Weitere Informationen
Kü (neu!) | k-j | Erhardt | Jochen |
Es stehen zahlreiche Quellen zur Verfügung, die Hilfe bei der Erstellung von Makros bieten. Verwenden Sie zuerst Hilfe → LibreOffice Hilfe, um die LibreOffice-Hilfeseiten zu öffnen. Die linke obere Ecke des LibreOffice Hilfesystem enthält eine Auswahlliste. Um die Hilfe für Basic zu erhalten, wählen Sie LibreOffice Basic aus dieser Liste. Dieser Hinweis gilt nur, wenn Sie den Helppack für LibreOffice installiert haben, so dass die Hilfe auch offline zur Verfügung steht. |
In LibreOffice enthaltene Makros
Kü (neu!) | k-j | Erhardt | Jochen |
Viele gute Makros sind schon in LibreOffice enthalten. Verwenden Sie Extras → Makros → Makros verwalten → LibreOffice Basic, um den Makro-Dialog zu öffnen. Erweitern Sie die Bibliothek LibreOfficeMakros. Sehen Sie sich zum Beispiel unter Tools die Debug-Module an. Einige gute Beispiele sind WritedbgInfo (Dokument) und printdbgInfo (Datenblatt). Versuchen Sie, diese Schritt für Schritt nachzuvollziehen. |
Onlinequellen
Kü (neu!) | k-j | Jochen | Erhardt |
Die folgenden Links und Referenzen beinhalten Informationen betreffs Makroprogrammierung: http://api.libreoffice.org/docs/common/ref/com/sun/star/module-ix.html (Offizielle IDL Referenz, hier finden Sie fast alle Befehle mit einer Beschreibung) http://api.openoffice.org/docs/common/ref/com/sun/star/module-ix.html (Offizielle IDL Referenz von OOo, hier finden Sie fast alle Befehle mit einer Beschreibung)
http://www.pitonyak.org/oo.php (Andrew Pitonyaks Makroseite)
|