VBA-Support

VBA (Visual Basic for Applications) ist die Makrosprache, die Microsoft entwickelt und in viele eigene Anwendungen eingebunden hat, darunter als prominenteste Vertreter die Office-Programme Word, Excel und PowerPoint. VBA ist in diesem Sinne ein Verwandter von StarBasic, und die grundsätzliche Syntax eines VBA-Programms entspricht auch der StarBasic-Syntax. Allerdings verwendet VBA ein vollständig anderes Objektmodell, so dass Programme, die mit Objekten in Dokumenten arbeiten, sich unter VBA und StarBasic stark unterscheiden.

Da Microsoft Office nach wie vor eine sehr hohe Verbreitung hat, haben die OpenOffice-Entwickler schon früh damit begonnen, begrenzten Support für das Microsoft-Objektmodell zu entwickeln. Dadurch wird es bei der Übernahme von Word- und Excel-Dokumenten in OpenOffice leichter, integrierte VBA-Makros weiter zu nutzen. Wenn Sie selbst Programmierkenntnisse in VBA haben, können Sie auch direkt VBA-Makros in OpenOffice schreiben und sparen sich damit den Aufwand, sich in das OpenOffice-Modell einzuarbeiten. Außerdem können Sie auf diese Weise Makros programmieren, die sowohl unter Word und Excel als auch unter OpenOffice nutzbar sind.

Der Schlüssel zum VBA-Support ist die Option vbasupport, die Sie ganz am Anfang des Makrodokuments aktivieren müssen:

Option vbasupport 1

Sobald diese Zeile auftaucht, können Sie viele VBA-Features nutzen. Ein kleines Beispiel dafür ist die im nativen StarBasic unbekannte globale Variable selection, die alle markierten Zellen enthält. Mit einer For-Each-Schleife ändern Sie dann z. B. schnell in allen markierten Zellen die dort gespeicherten Werte:

Option vbasupport 1
Sub TestVBA
  For Each zelle in selection
    zelle = zelle+1
  Next zelle
End Sub

Dieses einfache Beispiel setzt voraus, dass alle markierten Zellen einen numerischen Inhalt haben, also nicht Text oder Formeln enthalten. Um das gleiche Ergebnis ohne die VBA-Funktionen zu erhalten, wäre der StarBasic-Code aus Listing 3:

Zellen aus Bereich bearbeiten

Sub TestOOO
  sel = ThisComponent.getCurrentSelection().rangeAddress
  blatt = ThisComponent.CurrentController.ActiveSheet
  For j = sel.startColumn TO sel.EndColumn
    For i = sel.startRow TO sel.EndRow
      zelle = blatt.getCellByPosition(j,i)
      zelle.value = zelle.value + 1
    Next
  Next
End Sub

StarBasic kann auch die aktuelle Auswahl erkennen, aber es ist nicht möglich, mit For Each alle Zellen der Auswahl anzusprechen; stattdessen ist hier eine geschachtelte Schleife nötig. Auch muss das Makro den Zellwert explizit über zelle.value = zelle.value + 1 ansprechen, während VBA die gewünschte Rechenoperation auch "versteht", wenn Sie einfach zelle = zelle +1 schreiben.

VBA kennt verschiedene Kurznotationen, um bestimmte Zellen anzusprechen. OpenOffice unterstützt bei aktiviertem VBA-Support direkte Zellangaben wie [C1] für einzelne Zellen und [B3:F6] für Zellbereiche. Damit sind Skripte der folgenden Art möglich:

Sub Test
  [A1] = "Ich bin Text in Zelle A1"
  For Each zelle in [B2:F3]
    zelle = "Test"
  Next zelle
End Sub

Das Kursivsetzen geht jetzt auch einfacher, bei aktiviertem VBA-Support können Sie statt der Zeilen in Listing 1

For Each zelle in [B2:C5]
  Zelle.Font.Italic = True
Next

Tatsächlich geht es sogar noch kürzer, weil auch VBA-Zellbereiche das Italic-Attribut haben:

[B2:C5].Font.Italic = True

Das ist schneller hingeschrieben und auch leichter verständlich, darum ist es schade, dass StarBasic nicht von Haus aus solche Kurznotationen unterstützt.

Fazit

Für Gelegenheitsmakroprogrammierer bedeutet der VBA-Support in OpenOffice eine deutliche Erleichterung, denn Makros mit überschaubaren Aufgabengebieten sind in VBA leichter erstellt. Wer schon Vorkenntnisse aus früheren Experimenten mit VBA in Excel und Word hat, profitiert zudem davon, dass kein vollständiges Umlernen nötig ist. Wer ambitionierte Projekte angehen will, kommt nicht daran vorbei, sich mit UNO vertraut zu machen. Einiges an Literatur gibt es auch gratis im Internet, z. B. das StarOffice-8-Programmierhandbuch [4] und eine (englischsprachige) Anleitung zum Portieren von VBA-Makros [5]. Im Wiki gibt es einen Basic-Guide [6] (Abbildung 3), leider auch nur auf Englisch.

Abbildung 3: Das Basic Programming Guide unterliegt als Wiki regelmäßigen Aktualisierungen – leider nur auf Englisch.

Damit endet unsere kleine Einführung in die OpenOffice-Makroprogrammierung. Wenn Sie nun selbst experimentieren und dabei das eine oder andere nützliche Makro erstellen, dann lassen Sie doch die übrigen EasyLinux-Leser daran teilhaben: Wir werden einen kleinen Bereich auf der Heft-DVD für Ihre Beiträge reservieren.

[1] Thomas Krumbein: "Makros in OpenOffice.org Basic/StarBasic", Galileo Computing, 2008

[2] StarBasic-Konstanten: http://api.openoffice.org/docs/common/ref/com/sun/star/awt/module-ix.html

[3] Zeichenattribute: http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/Text/Formatting

[4] StarOffice-8-Programmierhandbuch für BASIC: http://dlc.sun.com/pdf/819-1326/819-1326.pdf

[5] Porting Excel/VBA to Calc/StarBasic: http://documentation.openoffice.org/HOW_TO/various_topics/VbaStarBasicXref.pdf

[6] BASIC Programming Guide: http://wiki.services.openoffice.org/wiki/Documentation/BASIC_Guide

[7] StarBasic-Workshop, Teil 1: Hans-Georg Eßer, "Tabellenprogrammierer", EasyLinux 04/2008, S. 77 ff., http://www.linux-community.de/artikel/16898

[8] StarBasic-Workshop, Teil 2: Hans-Georg Eßer, "Tabelle unter Kontrolle", EasyLinux 02/2009, S. 83 ff., http://www.linux-community.de/artikel/17467

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Tabellenprogrammierer
    OpenOffice Calc ist eine mächtige Tabellenkalkulation, die zahlreiche eingebaute Funktionen fürs automatische Berechnen von Zelleninhalten hat. Mit StarBasic-Programmen erweitern Sie die Standard-Features.
  • Tabelle unter Kontrolle
    OpenOffice bringt eine eigene Makro-Programmiersprache mit: Mit StarBasic können Sie umständliche manuelle Tätigkeiten automatisieren. Wir stellen Variablen, Kontrollstrukturen und Schleifen vor.
  • StarBasic
  • Automatikgetriebe
    Makros automatisieren wiederkehrende Tätigkeiten in OpenOffice. Schon mit wenigen Zeilen Programmcode hört im virtuellen Büro alles auf Ihr Kommando.
  • Migration Microsoft Office 2000 zu StarOffice 5.2 - Teil 2
    Beim letzten Mal zeigten wir Ihnen, welche Unterschiede zwischen Microsoft Office und StarOffice in der Bedienung existieren. In diesem zweiten Teil beschäftigen wir uns mit dem Import bereits vorliegender Dokumente. Da dies den schwierigsten Teil des gesamten Umstiegs darstellt, widmen wir den Workshop-Teil vollständig diesem Thema.
Kommentare

Infos zur Publikation

title_2015_02

Digitale Ausgabe: Preis € 9,80
(inkl. 19% MwSt.)

EasyLinux erscheint vierteljährlich und kostet EUR 9,80. Weitere Informationen zum Heft finden Sie auf der EasyLinux-Homepage.

Das EasyLinux-Jahresabo mit Prämie kostet ab EUR 33,30. Details zum EasyLinux-Jahresabo finden Sie im Medialinx-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!      

Tipp der Woche

Grammatikprüfung in LibreOffice nachrüsten
Grammatikprüfung in LibreOffice nachrüsten
Tim Schürmann, 24.04.2015 19:36, 0 Kommentare

LibreOffice kommt zwar mit einer deutschen Rechtschreibprüfung und einem guten Thesaurus, eine Grammatikprüfung fehlt jedoch. In ältere 32-Bit-Versionen ...

Aktuelle Fragen

Zu wenig Speicherplatz auf /boot unter MATE
Patrick Obenauer, 25.05.2015 14:28, 1 Antworten
Hallo zusammen, ich habe Ubuntu 14.10 mit MATE 1.8.2 (3.16-37) mit Standardeinstellungen aufgese...
Konsole / Terminal in Linux Mint 17.1 deutsch
Dirk Resag, 09.05.2015 23:39, 12 Antworten
Hallo an die Community, ich habe vor kurzem ein älteres Notebook, Amilo A1650G, 1GB Arbeitsspe...
Admin Probleme mit Q4os
Thomas Weiss, 30.03.2015 20:27, 6 Antworten
Hallo Leute, ich habe zwei Fragen zu Q4os. Die Installation auf meinem Dell Latitude D600 verl...
eeepc 1005HA externer sound Ausgang geht nicht
Dieter Drewanz, 18.03.2015 15:00, 1 Antworten
Hallo LC, nach dem Update () funktioniert unter KDE der externe Soundausgang an der Klinkenbuc...
AceCad DigiMemo A 402
Dr. Ulrich Andree, 15.03.2015 17:38, 2 Antworten
Moin zusammen, ich habe mir den elektronischen Notizblock "AceCad DigiMemo A 402" zugelegt und m...