StarOffice 8 Programmierhandbuch für BASIC
  Sök endast i den här boken
Ladda ner denna bok i PDF (1551 KB)

Kapitel 2 Die Sprache StarOffice Basic

StarOffice Basic gehört zur Familie der Basic-Sprachen. Viele Teile von StarOffice Basic sind mit Microsoft Visual Basic for Applications (VBA) und Microsoft Visual Basic identisch. Wer mit diesen Sprachen bereits einmal gearbeitet hat, findet sich schnell in StarOffice Basic zurecht.

Aber auch Programmierer anderer Sprachen – etwa Java, C++ oder Delphi – dürften keine großen Schwierigkeiten haben, sich in StarOffice Basic einzuarbeiten. StarOffice Basic ist eine vollständig entwickelte prozedurale Programmiersprache, die das Stadium der Verwendung rudimentärer Kontrollstrukturen wie GoTo und GoSub hinter sich gelassen hat.

Auch von den Vorteilen der objektorientierten Programmierung können Sie profitieren, da Sie über eine in StarOffice Basic vorhandene Schnittstelle externe Objekt-Bibliotheken verwenden können. Die gesamte StarOffice API basiert auf diesen Schnittstellen, die in den folgenden Kapiteln dieses Dokuments detailliert beschrieben werden.

In diesem Kapitel erhalten Sie einen Überblick über die Hauptelemente und -konstrukte der Sprache StarOffice Basic sowie das Rahmenwerk, an dem sich alle Anwendungen und Bibliotheken in StarOffice Basic orientieren.

Übersicht eines StarOffice Basic-Programms

Bei StarOffice Basic handelt es sich um eine Interpreter-Sprache. Im Gegensatz zu klassischen Compiler-Sprachen wie C++ oder Turbo Pascal erzeugt der StarOffice-Compiler jedoch keine ausführbaren oder selbstentpackenden Dateien, die automatisch ausgeführt werden können. Stattdessen kann ein StarOffice Basic-Programm durch Druck auf eine Taste bzw. Klicken auf eine Schaltfläche ausgeführt werden. Der Code wird zuerst auf offensichtliche Fehler überprüft und dann zeilenweise ausgeführt.

Programmzeilen

Der zeilenorientierte Ausführungsvorgang des Basic-Interpreters stellt einen der wesentlichen Unterschiede zwischen Basic und anderen Programmiersprachen dar. Während die Position von Zeilenumbrüchen innerhalb des Quellcodes in Java, C++ oder Delphi bedeutungslos ist, bilden die Zeilen eines Basic-Programms jeweils eine eigene, für sich abgeschlossene Einheit. Funktionsaufrufe, mathematische Ausdrücke und andere Sprachelemente wie Funktions- und Schleifenköpfe müssen stets in der Zeile abgeschlossen werden, in der sie beginnen.

Reicht der Platz dafür nicht aus oder führt dies zu unübersichtlich langen Zeilen, besteht die Möglichkeit, mehrere Zeilen durch das Hinzufügen von Unterstrichen ("_") miteinander zu verbinden. Das folgende Beispiel zeigt, wie vier Zeilen eines mathematischen Ausdrucks verbunden werden können:

LongExpression = (Expression1 * Expression2) + _
   (Expression3 * Expression4) + _
   (Expression5 * Expression6) + _
   (Expression7 * Expression8)

Hinweis –

Der Unterstrich muss immer das letzte Zeichen innerhalb einer verknüpften Zeile sein und darf nie von einem Leerzeichen oder Tabulator gefolgt werden; andernfalls erzeugt der Code einen Fehler.


Neben dem Verknüpfen einzelner Zeilen können Sie bei StarOffice Basic eine Zeile durch Doppelpunkte in mehrere Bereiche unterteilen, so dass ausreichender Platz für mehrere Ausdrücke entsteht. So lassen sich beispielsweise die Zuweisungen

a = 1
a = a + 1
a = a + 1 

wie folgt schreiben:

a = 1  :  a = a + 1  :  a = a + 1

Kommentare

Neben dem auszuführenden Programmcode kann ein StarOffice Basic-Programm auch Kommentare enthalten, die einzelne Programmteile erklären und wichtige Informationen bereitstellen, die sich zu einem späteren Zeitpunkt als nützlich erweisen können.

StarOffice Basic bietet zwei Methoden zum Einfügen von Kommentaren in den Programmcode:

  • Alle Zeichen, die auf ein Apostroph-Zeichen folgen, werden als Kommentar behandelt:

Dim A    ' Dies ist ein Kommentar für Variable A
  • Das Schlüsselwort Rem, gefolgt von einem Kommentar:

Rem Dieser Kommentar wird durch das Schlüsselwort Rem eingeleitet. 

Ein Kommentar umfasst normalerweise alle Zeichen bis zum Ende der Zeile. Die Folgezeile interpretiert StarOffice Basic hingegen wieder als reguläre Anweisung. Bei mehrzeiligen Kommentaren muss daher jede Zeile als Kommentar gekennzeichnet werden:

Dim B     ' Dieser Kommentar für die Variable B ist relativ lang
          ' und erstreckt sich über mehrere Zeilen. Das
          ' Kommentarzeichen muss daher in jeder Zeile 
          ' wiederholt werden.

Bezeichner

Ein StarOffice Basic-Programm kann dutzende, hunderte oder gar tausende Bezeichner (Marker) enthalten, die Namen für Variablen, Konstanten, Funktionen usw. darstellen. Bei der Wahl eines Namens als Bezeichner sind folgende Regeln zu beachten:

  • Bezeichner dürfen nur aus lateinischen Buchstaben, Ziffern und Unterstrichen (_) bestehen.

  • Das erste Zeichen eines Bezeichners muss ein Buchstabe oder ein Unterstrich sein.

  • Bezeichner dürfen keine Sonderzeichen wie ä â î ß enthalten.

  • Die maximal zulässige Länge eines Bezeichners beträgt 255 Zeichen.

  • Es findet keine Unterscheidung von Groß- und Kleinschreibung statt. Der Bezeichner EineTestVariable definiert beispielsweise dieselbe Variable wie einetestVariable und EINETESTVARIABLE.

    Von dieser Regel gibt es jedoch eine Ausnahme: Bei Konstanten der UNO-API wird zwischen Groß- und Kleinschreibung unterschieden. Weitere Informationen zu UNO finden Sie in Kapitel 4, Einführung in die StarOffice API.


Hinweis –

Die Regeln für den Aufbau von Bezeichnern unterscheiden sich in StarOffice Basic gegenüber VBA. So lässt StarOffice Basic beispielsweise Sonderzeichen in Bezeichnern nur zu, wenn "Option Compatible" verwendet wird, da es bei internationalen Projekten hierdurch zu Problemen kommen kann.


Hier einige Beispiele für richtige und falsche Bezeichner:

Surname      ' Korrekt
Surname5     ' Korrekt (Zahl 5 steht nicht an erster Stelle)
First Name   ' Falsch (Leerzeichen nicht erlaubt)
DéjàVu       ' Falsch (Buchstaben wie é, à nicht erlaubt)
5Surnames    ' Falsch (erstes Zeichen darf keine Zahl sein)
First,Name   ' Falsch (Komma und Punkt nicht erlaubt)

Arbeiten mit Variablen

Implizite Variablendeklaration

Basic-Sprachen sind sehr anwenderfreundlich angelegt. Hieraus resultiert, dass StarOffice Basic die Erstellung von Variablen durch den einfachen Gebrauch ohne explizite Deklaration unterstützt. Mit anderen Worten ist eine Variable von dem Moment an vorhanden, in dem sie im Code verwendet wird. In Abhängigkeit von den bereits vorhandenen Variablen deklariert das folgende Beispiel bis zu drei neue Variablen:

a = b + c

Das implizite Deklarieren von Variablen ist kein guter Programmierstil, da es dadurch zur versehentlichen Erzeugung neuer Variablen durch beispielsweise Tipp-/Eingabefehler kommen kann. Statt also eine Fehlermeldung auszugeben, initialisiert der Interpreter den Tippfehler als neue Variable mit dem Wert 0. Das Auffinden derartiger Fehler im Code kann sehr schwierig sein.

Explizite Variablendeklaration

Um durch eine implizite Variablendeklaration verursachte Fehler zu vermeiden, bietet StarOffice Basic einen Schalter namens

Option Explicit

Er muss in der ersten Programmzeile eines jeden Moduls aufgeführt werden und stellt sicher, dass eine Fehlermeldung ausgegeben wird, wenn eine der verwendeten Variablen nicht deklariert ist. Der Schalter Option Explicit sollte in allen Basic-Modulen verwendet werden.

In seiner einfachsten Form lautet der Befehl für eine explizite Variablendeklaration:

    
Dim MyVar

Dieses Beispiel deklariert eine Variable mit dem Namen MyVar und dem Typ Variant. Ein Variant ist eine Universalvariable, die alle möglichen Werte aufnehmen kann, etwa Zeichenfolgen, ganze Zahlen, Fließkommazahlen und Boolean-Werte. Es folgen einige Beispiele für Variant-Variablen:

MyVar = "Hello World"      ' Zuweisung einer Zeichenfolge
MyVar = 1                  ' Zuweisung einer ganzen Zahl
MyVar = 1.0                ' Zuweisung einer Fließkommazahl
MyVar = True               ' Zuweisung eines Boolean-Werts

Die im vorangehenden Beispiel deklarierten Variablen können sogar in ein- und demselben Programm für verschiedene Typen verwendet werden. Obgleich hieraus eine beachtliche Flexibilität resultiert, sollte man eine Variable auf nur einen Variablentyp beschränken. Wenn StarOffice Basic einen fehlerhaft definierten Variablentyp in einem bestimmten Kontext erkennt, wird eine Fehlermeldung erzeugt.

Verwenden Sie folgende Syntax, um eine typgebundene Variablendeklaration vorzunehmen:

Dim MyVar As Integer   ' Deklaration einer Variablen vom Typ Integer

Die Variable wird mit dem Typ Integer deklariert und kann ganzzahlige Werte aufnehmen. Sie können auch mit folgender Syntax eine Variable vom Typ Integer deklarieren:

Dim MyVar%          ' Deklaration einer Variablen vom Typ Integer

Die Dim-Anweisung kann mehrere Variablendeklarationen aufnehmen:

Dim MyVar1, MyVar2

Wenn die Variablen einem permanenten Typ zugewiesen werden sollen, müssen Sie für jede Variable eine gesonderte Zuweisung vornehmen:

Dim MyVar1 As Integer, MyVar2 As Integer

Wird der Typ einer Variable nicht deklariert, weist StarOffice Basic der Variable einen Variant-Typ zu. In der folgenden Variablendeklaration wird beispielsweise MyVar1 Variant zugewiesen und MyVar2 Integer:

Dim MyVar1, MyVar2 As Integer

Im Folgenden werden alle in StarOffice Basic verfügbaren Variablentypen aufgeführt und beschrieben, wie sie eingesetzt und deklariert werden können.

Zeichenfolgen

Zeichenfolgen bilden zusammen mit den Zahlen die wichtigsten Basistypen von StarOffice Basic. Eine Zeichenfolge (String) besteht aus einer Kette aufeinander folgender Einzelzeichen. Intern speichert der Computer die Zeichenfolgen als Zahlenfolge ab, wobei jede Zahl für ein bestimmtes Zeichen steht.

Vom ASCII-Zeichensatz zu Unicode

In Zeichensätzen werden in einer Zeichenfolge enthaltene Zeichen einem entsprechenden Code in einer Tabelle zugeordnet (Zahlen und Buchstaben), die beschreibt, wie der Computer die Zeichenfolge anzeigen soll.

Der ASCII-Zeichensatz

Der ASCII-Zeichensatz ist ein Satz von Codes, der Zahlen, Buchstaben und Sonderzeichen mit jeweils einem Byte darstellt. Die ASCII-Codes 0 bis 127 entsprechen dem Alphabet und gängigen Symbolen (Punkt, Klammern, Komma) sowie einigen speziellen Steuerzeichen für Bildschirm und Drucker. Der ASCII-Zeichensatz wird normalerweise als Standardformat zur Übertragung von Texten zwischen unterschiedlichen Computern verwendet.

Dieser Zeichensatz enthält allerdings keine der in Europa verwendeten Sonderzeichen wie â, ä oder î, noch andere Zeichenformate wie zum Beispiel das kyrillische Alphabet.

Der ANSI-Zeichensatz

Bei der Entwicklung des Produkts Windows verwendete Microsoft den Zeichensatz des American National Standards Institute, kurz ANSI, der schrittweise um zusätzliche Zeichen erweitert wurde, die im ASCII-Zeichensatz nicht enthalten sind.

Codepages

Der ISO 8859-Zeichensatz stellt einen internationalen Standard dar. Die ersten 128 Zeichen des ISO-Zeichensatzes entsprechen dem ASCII-Zeichensatz. Mit dem ISO-Standard wurden neue Zeichensätze eingeführt (Codepages), damit weitere Sprachen korrekt dargestellt werden konnten. Hieraus resultierte jedoch auch, dass derselbe Zeichenwert in unterschiedlichen Sprachen verschiedene Zeichen darstellen kann.

Unicode

Unicode erhöht die Länge eines Zeichens auf vier Byte und kombiniert verschiedene Zeichensätze, um einen Standard zu erzeugen, mit dem so viele der Weltsprachen wie möglich dargestellt werden können sollen. Die Version 2.0 von Unicode wird mittlerweile von vielen Programmen unterstützt, wozu auch StarOffice und StarOffice Basic gehören.

String-Variablen

StarOffice Basic speichert Zeichenfolgen als String-Variablen in Unicode. Eine String-Variable kann bis zu 65535 Zeichen aufnehmen. Intern speichert StarOffice Basic für jedes Zeichen den verknüpften Unicode-Wert. Der für eine String-Variable benötigte Arbeitsspeicher hängt davon ab, wie lang die Zeichenfolge ist.

Beispiel-Deklarationen einer String-Variablen:

Dim Variable As String

Diese Deklaration kann auch wie folgt geschrieben werden:

Dim Variable$

Hinweis –

Achten Sie beim Portieren von VBA-Anwendungen darauf, dass diese die in StarOffice Basic maximal zugelassene Länge für Zeichenfolgen einhalten (65535 Zeichen).


Angeben expliziter Zeichenfolgen

Um einer String-Variable eine explizite Zeichenfolge zuzuweisen, schließen Sie die Zeichenfolge in Anführungszeichen ein (").

Dim MyString As String
MyString = "Dies ist ein Test."

Um eine Zeichenfolge auf zwei Zeilen aufzuteilen, fügen Sie am Ende der ersten Zeile ein Pluszeichen an:

Dim MyString As String
MyString = "Diese Zeichenfolge ist so lang, dass sie " + _
           "auf zwei Zeilen aufgeteilt wurde."

Um in einer Zeichenfolge ein Anführungszeichen (") verwenden zu können, müssen Sie es an der gewünschten Stelle doppelt eingeben:

Dim MyString As String
MyString = "ein ""-Anführungszeichen."    ' ergibt ein "-Anführungszeichen

Zahlen

StarOffice Basic unterstützt fünf Basistypen zur Verarbeitung von Zahlen:

  • Integer

  • Long Integer

  • Float

  • Double

  • Currency

Integer-Variablen

Integer-Variablen können jede ganze Zahl zwischen -32768 und 32767 aufnehmen. Eine Integer-Variable kann bis zu 2 Byte Speicherplatz belegen. Das Typ-Deklarationszeichen für Integer-Variablen ist %. Berechnungen, die Integer-Variablen verwenden, sind sehr schnell und besonders nützlich für Schleifenzähler. Wenn Sie einer Integer-Variable eine Fließkommazahl zuweisen, wird die Zahl auf die nächste ganze Zahl auf- oder abgerundet.

Beispiel-Deklarationen für Integer-Variablen:

Dim Variable As Integer
Dim Variable%

Long Integer-Variablen

Long Integer-Variablen können jede ganze Zahl zwischen -2147483648 und 2147483647 aufnehmen. Eine Long Integer-Variable kann bis zu 4 Byte Speicher belegen. Das Typ-Deklarationszeichen für Long Integer-Variablen ist &. Berechnungen, die Long Integer-Variablen verwenden, sind sehr schnell und besonders nützlich für Schleifenzähler. Wenn Sie einer Long Integer-Variable eine Fließkommazahl zuweisen, wird die Zahl auf die nächste ganze Zahl auf- oder abgerundet.

Beispiel-Deklarationen für Long Integer-Variablen:

Dim Variable as Long
Dim Variable&

Single-Variablen

Single-Variablen können jede positive oder negative Fließkommazahl zwischen 3,402823 x 1038 und 1,401298 x 10-45 aufnehmen. Eine Single-Variable kann bis zu 4 Byte Speicherplatz belegen. Das Typ-Deklarationszeichen für Single-Variablen ist !.

Ursprünglich wurden Single-Variablen zur Verringerung der für die präziseren Double-Variablen benötigten Verarbeitungszeit eingesetzt. Dieser Geschwindigkeitsaspekt trifft jedoch nicht mehr zu, so dass Single-Variablen kaum mehr benötigt werden.

Beispiel-Deklarationen für Single-Variablen:

Dim Variable as Single
Dim Variable!

Double-Variablen

Double-Variablen können jede positive oder negative Fließkommazahl zwischen 1,79769313486232 x 10308 und 4,94065645841247 x 10-324 aufnehmen. Eine Double-Variable kann bis zu 8 Byte Speicherplatz belegen. Double-Variablen eignen sich für exakte Berechnungen. Das Typ-Deklarationszeichen ist #.

Beispiel-Deklarationen für Double-Variablen:

Dim Variable As Double
Dim Variable#

Currency-Variablen (Währung)

Currency-Variablen unterscheiden sich von den anderen Variablentypen in der Art, wie sie Werte verarbeiten. Das Dezimaltrennzeichen ist fest und wird von vier Dezimalstellen gefolgt. Die Variable kann vor dem Dezimaltrennzeichen bis zu 15 Ziffern enthalten. Eine Currency-Variable kann jeden Wert zwischen -922337203685477,5808 und +922337203685477,5807 aufnehmen und bis zu 8 Byte Speicherplatz belegen. Das Typ-Deklarationszeichen für Currency-Variablen ist @.

Currency-Variablen sind hauptsächlich für kaufmännische Berechnungen gedacht, bei denen durch die Verwendung von Fließkommazahlen unvorhersehbare Rundungsfehler auftreten können.

Beispiel-Deklarationen für Currency-Variablen:

Dim Variable As Currency
Dim Variable@

Angeben expliziter Zahlen

Zahlen können auf zahlreiche Arten dargestellt werden, im Dezimalformat, in wissenschaftlicher Notation oder sogar in einem anderen Zahlensystem als dezimal. Folgende Regeln gelten in StarOffice Basic für Zahlen:

Ganze Zahlen

Am einfachsten ist der Umgang mit ganzen Zahlen. Sie werden im Quellcode ohne Tausendertrennzeichen aufgeführt:

Dim A As Integer
Dim B As Float

A = 1210
B = 2438

Den Zahlen kann sowohl ein Plus (+) als auch ein Minus (-) als Vorzeichen vorangestellt werden (mit oder ohne Leerzeichen zwischen Zahl und Vorzeichen):

Dim A As Integer
Dim B As Float

A = + 121
B = - 243

Dezimalzahlen

Beim Eingeben einer Dezimalzahl verwenden Sie einen Punkt (.) als Dezimaltrennzeichen. Mit dieser Regel wird sichergestellt, dass sich Quellcode ohne Konvertierung von einem Land in ein anderes Land übertragen lässt.

Dim A As Integer
Dim B As Integer
Dim C As Float

A = 1223.53      ' wird gerundet
B = - 23446.46   ' wird gerundet
C = + 3532.76323

Auch bei Dezimalzahlen ist die Verwendung der Vorzeichen Plus (+) und Minus (-) gestattet (ebenfalls mit und ohne Leerzeichen).

Wird einer Integer-Variable eine Dezimalzahl zugewiesen, rundet StarOffice Basic die Zahl auf oder ab.

Exponentialschreibweise

StarOffice Basic lässt die Angabe von Zahlen in der Exponentialschreibweise zu. So können Sie beispielsweise die Zahl 1.5 x 10-10 (0,00000000015) auch als 1.5e-10 schreiben. Der Buchstabe "e" kann hierbei klein oder groß geschrieben werden sowie mit oder ohne ein vorangestelltes Pluszeichen (+).

Hier einige Beispiele richtiger und falscher Zahlangaben in Exponentialschreibweise:

Dim A As Double

A = 1.43E2        ' Korrekt 
A = + 1.43E2      ' Korrekt (Leerzeichen zwischen Plus und Basiszahl) 
A = - 1.43E2      ' Korrekt (Leerzeichen zwischen Minus und Basiszahl) 
A = 1.43E-2       ' Korrekt (Negativer Exponent)

A = 1.43E -2      ' Falsch (Leerzeichen innerhalb der Zahl nicht erlaubt) 
A = 1,43E-2       ' Falsch (Komma als Dezimaltrennzeichen nicht erlaubt) 
A = 1.43E2.2      ' Falsch (Exponent muss eine ganze Zahl sein)

Beachten Sie, dass im ersten und dritten falschen Beispiel keine Fehlermeldung erzeugt wird, obwohl die Variablen falsche Werte zurückgeben. Der Ausdruck

A = 1.43E -2

wird interpretiert als 1,43 minus 2, was dem Wert -0,57 entspricht. Gewollt war jedoch der Wert 1,43 * 102 (entspricht 0,0143). Bei dem Wert

A = 1.43E2.2

ignoriert StarOffice Basic den Nachkommateil des Exponenten und interpretiert den Ausdruck als

A = 1.43E2

Hexadezimalwerte

Das Hexadezimalsystem (System mit Basis 16) hat den Vorteil, dass zwei Ziffern jeweils exakt einem Byte entsprechen, was einen maschinennahen Umgang mit Zahlen gestattet. Als Ziffern kommen beim Hexadezimalsystem die Ziffern 0 bis 9 sowie die Buchstaben A bis F zum Einsatz. Ein A steht für die Dezimalzahl 10, ein F für die Dezimalzahl 15. In StarOffice Basic können Sie ganzzahlige Hexadezimalwerte verwenden, solange diesen ein &H voransteht.

Dim A As Long

A = &HFF   ' Hexadezimalwert FF entspricht dem Dezimalwert 255 
A = &H10   ' Hexadezimalwert 10 entspricht dem Dezimalwert 16

Oktalwerte

StarOffice Basic kann ebenfalls mit dem Oktalsystem (System mit Basis 8) umgehen, das die Zahlen 0 bis 7 verwendet. Hierbei müssen Sie ganze Zahlen mit vorangestelltem &O verwenden.

Dim A As Long

A = &O77   ' Oktalwert 77 entspricht dem Dezimalwert 63 
A = &O10   ' Oktalwert 10 entspricht dem Dezimalwert 8

True (Wahr) und False (Falsch)

Boolean-Variablen

Boolean-Variablen können nur zwei Werte enthalten: True (Wahr) oder False (Falsch). Sie eignen sich für binäre Angaben, die nur genau einen der genannten Zustände einnehmen können. Ein Boolean-Wert wird intern als Integer-Wert mit 2 Byte gespeichert, wobei 0 dem False und jeder andere Wert dem True entspricht. Für Boolean-Variablen existiert kein Typ-Deklarationszeichen. Die Deklaration ist ausschließlich über den Zusatz As Boolean möglich.

Beispiel-Deklarationen einer Boolean-Variablen:

Dim Variable As Boolean

Datums- und Zeitangaben

Date-Variablen

Date-Variablen können Datums- und Zeitwerte enthalten. Bei der Speicherung von Datumswerten verwendet StarOffice Basic ein internes Format, das Vergleiche und mathematische Operationen an den Datums- und Zeitwerten erlaubt. Für Date-Variablen existiert kein Typ-Deklarationszeichen. Die Deklaration ist ausschließlich über den Zusatz As Date möglich.

Beispiel-Deklarationen einer Date-Variablen:

Dim Variable As Date

Datenfelder

Neben einfachen Variablen (Skalare) unterstützt StarOffice Basic auch Datenfelder (Arrays). Ein Datenfeld enthält mehrere Variablen, die über einen Index adressiert werden.

Einfache Arrays

Die Deklaration eines Arrays ähnelt der einer einfachen Variablendeklaration. Im Gegensatz zur Variablendeklaration folgen dem Array-Namen jedoch Klammern, die Angaben zu der Anzahl der Elemente enthält. Der Ausdruck

Dim MyArray(3)

deklariert einen Array mit 4 Variablen vom Datentyp Variant, nämlich MyArray(0), MyArray(1), MyArray(2) und MyArray(3).

Innerhalb eines Arrays können auch typspezifische Variablen deklariert werden. So deklariert beispielsweise die folgende Zeile einen Array mit 4 Integer-Variablen:

Dim MyInteger(3) As Integer

In dem vorhergehenden Beispiel beginnt der Index des Arrays immer mit dem Standardstartwert 0. Alternativ kann bei der Datenfelddeklaration aber auch ein Gültigkeitsbereich mit Start- und Endwerten festgelegt werden. Folgendes Beispiel deklariert ein Datenfeld mit 6 Integer-Werten, die über die Indizes 5 bis 10 adressiert werden können:

Dim MyInteger(5 To 10)

Bei den Indizes muss es sich nicht zwangsläufig um positive Werte handeln. Das folgende Beispiel zeigt eine ebenfalls korrekte Deklaration, jedoch mit negativen Datenfeld-Grenzwerten:

Dim MyInteger(-10 To -5)

Ein Integer-Datenfeld mit 6 Werten, die mit den Indizes -10 bis -5 adressierbar sind, wird deklariert.

Bei der Definition von Datenfeldindizes müssen Sie drei Grenzwerte beachten::

  • Der kleinste mögliche Index beträgt -32768.

  • Der größte mögliche Index beträgt 32767.

  • Die maximale Anzahl von Elementen (innerhalb einer Datenfelddimension) beträgt 16368.


Hinweis –

In VBA gelten teilweise andere Grenzwerte für Datenfeldindizes. Dies gilt ebenso für die je Dimension maximal zugelassene Anzahl von Elementen. Die in VBA gültigen Werte finden Sie in der jeweiligen VBA-Dokumentation.


Vorgabewert für Startindex

Der Startindex eines Datenfeldes beginnt normalerweise mit dem Wert 0. Alternativ können Sie mit folgendem Aufruf den Startindex für alle Datenfelddeklarationen auf den Wert 1 festlegen:

Option Base 1

Der Aufruf muss im Kopfbereich eines Moduls stehen, damit er auf alle Deklarationen in dem Modul Anwendung findet. Dieser Aufruf hat jedoch keine Auswirkungen auf die mit der StarOffice API definierten UNO-Sequenzen, deren Index immer mit 0 beginnt. Um den Code übersichtlich zu halten, sollten Sie von der Verwendung von Option Base 1 Abstand nehmen.

Bei der Verwendung von Option Base 1 bleibt die Anzahl der in einem Array zugelassenen Elemente unberührt, lediglich der Startindex ändert sich. Die Deklaration

Option Base 1
' ...
Dim MyInteger(3)

erzeugt 4 Integer-Variablen, die sich mit den Ausdrücken MyInteger(1), MyInteger(2), MyInteger(3) und MyInteger(4) beschreiben lassen.


Hinweis –

In StarOffice Basic hat der Ausdruck Option Base 1 im Gegensatz zu VBA keinen Einfluss auf die Anzahl der Elemente eines Arrays. In StarOffice Basic wird lediglich der Startindex verschoben. Während die Deklaration MyInteger(3) in VBA drei Integer-Werte mit den Indizes 1 bis 3 erzeugt, erstellt die gleiche Deklaration in StarOffice Basic vier Integer-Werte mit den Indizes 1 bis 4. Durch die Verwendung von Option Compatible verhält sich StarOffice Basic wie VBA.


Mehrdimensionale Datenfelder

Neben eindimensionalen Datenfeldern unterstützt StarOffice Basic auch die Verarbeitung mehrdimensionaler Datenfelder. Die entsprechenden Dimensionen werden durch Kommata voneinander getrennt. So definiert das Beispiel

Dim MyIntArray(5, 5)

einen Integer-Array mit zwei Dimensionen mit jeweils 6 Indizes (adressierbar über die Indizes 0 bis 5). Der gesamte Array kann somit insgesamt 6 × 6 = 36 Integer-Werte aufnehmen.

Obwohl Sie in StarOffice Basic hunderte von Dimensionen in einem Array definieren können, ist die Anzahl tatsächlich verwendbarer Dimensionen durch den zur Verfügung stehenden Arbeitsspeicher begrenzt.

Dynamische Dimensionsänderungen von Datenfeldern

Die vorstehenden Beispiele basieren auf Datenfeldern mit vorgegebener Dimension. Sie können aber auch Arrays definieren, bei denen sich die Dimension der Datenfelder dynamisch ändert. So können Sie beispielsweise einen Array definieren, der alle Begriffe eines Texts enthalten soll, die mit dem Buchstaben A beginnen. Da die Anzahl dieser Wörter anfangs unbekannt ist, müssen Sie in der Lage sein, die Feldgrenzwerte nachträglich zu ändern. Hierzu verwenden Sie in StarOffice Basic folgenden Aufruf:

ReDim MyArray(10)

Hinweis –

Im Gegensatz zu VBA, wo Sie nur dynamische Arrays mit Dim MyArray() dimensionieren können, können Sie in StarOffice Basic sowohl statische als auch dynamische Arrays mit ReDim ändern.


Das folgende Beispiel ändert die Dimension des Ausgangs-Arrays so, dass er zwischen 11 und 21 Werte erfassen kann:

Dim MyArray(4) As Integer         ' Deklaration mit fünf Elementen

' ...

ReDim MyArray(10) As Integer      ' Erhöhung auf 11 Elemente

' ...

ReDim MyArray(20) As Integer      ' Erhöhung auf 21 Elemente

Bei der Redimensionierung eines Arrays lassen sich sämtliche Möglichkeiten verwenden, die in den vorstehenden Abschnitten erläutert wurden. Hierzu gehören auch die Deklaration mehrdimensionaler Datenfelder sowie die Angabe expliziter Start- und Endwerte. Mit einer Dimensionsänderung des Datenfelds geht sein alter Inhalt vollständig verloren. Sollen die ursprünglichen Werte beibehalten werden, müssen Sie den Befehl Preserve verwenden:

Dim MyArray(10) As Integer            ' Definition der Ausgangs-
                                      ' dimensionen

' ...

ReDim Preserve MyArray(20)   As Integer      ' Erhöhung im
                                             ' Datenfeld unter
                                             ' Beibehaltung des  Inhalts

Stellen Sie bei der Verwendung von Preserve sicher, dass die Anzahl der Dimensionen und der Typ der Variablen unverändert bleiben.


Hinweis –

Im Gegensatz zu VBA, wo lediglich die Obergrenze der letzten Dimension eines Datenfelds mit Preserve geändert werden kann, können Sie in StarOffice Basic ebenfalls andere Dimensionen ändern.

Wenn Sie ReDim zusammen mit Preserve verwenden, müssen Sie denselben Datentyp, wie in der ursprünglichen Datenfelddeklaration angegeben, verwenden.


Gültigkeitsbereich und Lebensdauer von Variablen

Eine Variable hat in StarOffice Basic eine begrenzte Lebensdauer und einen begrenzten Gültigkeitsbereich, innerhalb dessen sie von anderen Programmfragmenten gelesen und verwendet werden kann. Die Zeitspanne, über die eine Variable erhalten bleibt sowie von wo aus auf sie zugegriffen werden kann, hängt von der angegebenen Position und dem Typ ab.

Lokale Variablen

Variablen, die innerhalb einer Funktion oder Prozedur deklariert werden, werden als lokale Variablen bezeichnet:

Sub Test
   Dim MyInteger As Integer

   ' ...
End Sub

Lokale Variablen behalten ihre Gültigkeit nur so lange, wie die Funktion oder Prozedur ausgeführt wird; danach werden sie auf null zurückgesetzt. Bei jedem Aufruf der Funktion stehen die zuvor erzeugten Werte nicht mehr zur Verfügung.

Um die vorherigen Werte zu erhalten, muss die Variable als Static definiert werden:

Sub Test 
   Static MyInteger As Integer

   ' ...

End Sub

Hinweis –

Im Gegensatz zu VBA stellt StarOffice Basic sicher, dass der Name einer lokalen Variablen nicht gleichzeitig für eine globale oder private Variable im Kopfbereich des Moduls verwendet wird. Wenn Sie eine VBA-Anwendung nach StarOffice Basic portieren, müssen Sie alle doppelten Variablennamen ändern.


Öffentliche Variablen

Öffentliche Variablen werden im Kopfbereich eines Moduls mit dem Schlüsselwort Dim definiert. Sie stehen allen Modulen in ihrer Bibliothek zur Verfügung:

Modul A:

Dim A As Integer

Sub Test
  Flip
  Flop
End Sub

Sub Flip
    A = A + 1
    End Sub

Modul B:

Sub Flop
   A = A - 1
End Sub

Der Wert der Variablen A wird von der Funktion Test nicht geändert, aber in der Funktion Flip um eins erhöht sowie in der Funktion Flop um eins verringert. Beide dieser Änderungen an der Variable sind global.

Sie können auch mit dem Schlüsselwort Public statt Dim eine öffentliche Variable deklarieren:

    
Public A As Integer

Eine öffentliche Variable steht nur so lange zur Verfügung, wie das verknüpfte Makro ausgeführt wird; danach wird die Variable zurückgesetzt.

Globale Variablen

Ihren Funktionen nach sind globale Variablen den öffentlichen Variablen ähnlich. Allerdings bleiben ihre Werte auch dann noch erhalten, wenn die Ausführung des verknüpften Makros beendet wurde. Die Deklaration von globalen Variablen erfolgt im Kopfbereich eines Moduls mit dem Schlüsselwort Global:

    
Global A As Integer

Private Variablen

Private-Variablen stehen ausschließlich in dem Modul zur Verfügung, in dem sie definiert wurden. Eine solche Variable wird mit dem Schlüsselwort Private definiert:

    
Private MyInteger As Integer

Enthalten mehrere Module eine Private-Variable mit demselben Namen, so erzeugt StarOffice Basic für jedes Vorkommen des Namens eine unterschiedliche Variable. Im folgenden Beispiel verfügen beide Module A und B über eine Private-Variable namens C. Die Funktion Test setzt zuerst die Private-Variable in Modul A und dann die Private-Variable in Modul B.

Modul A:

Private C As Integer

Sub Test
    SetModuleA      ' Setzt die Variable C aus Modul A
    SetModuleB      ' Setzt die Variable C aus Modul B

    ShowVarA        ' Zeigt die Variable C aus Modul A an. (= 10)
    ShowVarB        ' Zeigt die Variable C aus Modul B an. (= 20) 
End Sub

Sub SetModuleA
    A = 10
End Sub

Sub ShowVarA
    MsgBox C        ' Zeigt die Variable C aus Modul A an.
End Sub

Modul B:

Private C As Integer

Sub SetModuleB
   A = 20
End Sub

Sub ShowVarB
   MsgBox C        ' Zeigt die Variable C aus Modul B an.
End Sub

Konstanten

Die Deklaration einer Konstanten erfolgt in StarOffice Basic über das Schlüsselwort Const:

Const A = 10

Sie können auch den Konstantentyp direkt in der Deklaration angeben:

Const B As Double = 10

Operatoren

StarOffice Basic versteht die gängigen mathematischen, logischen und vergleichenden Operatoren.

Mathematische Operatoren

Mathematische Operatoren können auf alle Zahlentypen angewendet werden, wobei der Operator + auch zum Verknüpfen von Zeichenfolgen verwendet werden kann.

+

Addition von Zahlen und Datumswerten, Verketten von Zeichenfolgen

-

Subtraktion von Zahlen und Datumswerten

*

Multiplikation von Zahlen

/

Division von Zahlen

\

Division von Zahlen mit ganzzahligem Ergebnis (gerundet)

^

Potenzieren von Zahlen

MOD

Modulo-Operation (Berechnung des Rests einer Division)

Logische Operatoren

Logische Operatoren gestatten die Verknüpfung von Elementen gemäß den Regeln der booleschen Algebra. Werden die Operatoren auf Boolean-Werte angewendet, liefert die Verknüpfung sofort das gewünschte Ergebnis. Beim Einsatz im Zusammenhang mit Integer- und Long Integer-Werten erfolgt eine bitweise Verknüpfung.

AND

Und-Verknüpfung

OR

Oder-Verknüpfung

XOR

Exklusive Oder-Verknüpfung

NOT

Negation

EQV

Equivalent-Test (beide Teile True oder False)

IMP

Implikation (falls erster Ausdruck wahr, muss auch zweiter wahr sein)

Vergleichsoperatoren

Vergleichsoperatoren können auf alle elementaren Variablentypen (Zahlen, Datumsangaben, Zeichenfolgen und Boolean-Werte) angewendet werden.

=

Gleichheit von Zahlen, Datumswerten und Zeichenfolgen

<>

Ungleichheit von Zahlen, Datumswerten und Zeichenfolgen

>

Größer-Prüfung für Zahlen, Datumswerte und Zeichenfolgen

>=

Größer-Gleich-Prüfung für Zahlen, Datumswerte und Zeichenfolgen

<

Kleiner-Prüfung für Zahlen, Datumswerte und Zeichenfolgen

<=

Kleiner-Gleich-Prüfung für Zahlen, Datumswerte und Zeichenfolgen


Hinweis –

StarOffice Basic unterstützt nicht den VBA-Vergleichsoperator Like.


Verzweigungen

Mit Verzweigungs-Anweisungen können Sie die Ausführung eines Codeblocks davon abhängig machen, dass eine bestimmte Bedingung erfüllt wird.

If...Then...Else

Die gängigste Verzweigungs-Anweisung ist die If-Anweisung, die im folgenden Beispiel dargestellt ist:

If A > 3 Then
   B = 2
End If

Die Zuweisung B = 2 wird nur dann ausgeführt, wenn der Wert der Variablen A größer als drei ist. Eine Abwandlung der If-Anweisung ist die If/Else-Klausel:

If A > 3 Then
   B = 2
Else
   B = 0
End If

In diesem Beispiel wird der Variable B der Wert 2 zugewiesen, wenn A größer als 3 ist, andernfalls wird B der Wert 0 zugewiesen.

Um komplexere Anweisungen zu erstellen, kann die If-Anweisung geschachtelt werden, zum Beispiel:

If A = 0 Then
   B = 0
ElseIf A < 3 Then
   B = 1
Else
   B = 2
End If

Wenn die Variable A den Wert null hat, wird B ebenfalls der Wert 0 zugewiesen. Wenn A kleiner als 3 ist (aber ungleich Null), wird B der Wert 1 zugewiesen. In allen anderen Fällen (d. h., wenn A größer oder gleich 3 ist) wird B der Wert 2 zugewiesen.

Select...Case

Die Select...Case-Anweisung stellt eine Alternative zur geschachtelten If-Anweisung dar und wird eingesetzt, wenn ein Wert gegen verschiedene Bedingungen abgeprüft werden soll:

Select Case DayOfWeek

Case 1:
   NameOfWeekday = "Sonntag"
Case 2:
   NameOfWeekday = "Montag"
Case 3:
   NameOfWeekday = "Dienstag"
Case 4:
   NameOfWeekday = "Mittwoch"
Case 5:
   NameOfWeekday = "Donnerstag"
Case 6:
   NameOfWeekday = "Freitag"
Case 7:
   NameOfWeekday = "Samstag"
End Select

In diesem Beispiel sind den Wochentagen Nummern zugeordnet, so dass der Variable DayOfWeek für Sonntag der Wert 1 zugewiesen wird, für Montag der Wert 2 usw.

Der Befehl Select ist nicht auf einfache 1:1-Zuordnungen beschränkt. Sie können auch Vergleichsoperatoren oder Listen von Ausdrücken in einer Case-Verzweigung angeben. Das folgende Beispiel listet die wichtigsten Syntax-Varianten auf:

Select Case Var

Case 1 To 5

   ' ... Var liegt zwischen den Zahlen 1 und 5

Case 6, 7, 8

   ' ... Var ist 6, 7 oder 8

Case Var > 8 And Var < 11

   ' ... Var ist größer als 8 und kleiner als 11

Case Else

   ' ... alle anderen Fälle


End Select

Schleifen

Eine Schleife führt einen Codeblock für eine angegebene Anzahl von Wiederholungen aus. Die Anzahl der Durchläufe kann bei Schleifen auch unspezifiziert sein.

For...Next

Die For...Next-Schleife verfügt über eine festgelegte Anzahl von Durchläufen. Der Schleifenzähler definiert die Anzahl der Ausführungen der Schleife. Im folgenden Beispiel

Dim I
For I = 1 To 10
   ' ...  Innenteil der Schleife
Next I

ist Variable I der Schleifenzähler mit einem Startwert von 1. Der Zähler wird am Ende jedes Durchlaufs der Schleife um 1 erhöht. Wenn die Variable I gleich 10 ist, endet die Schleife.

Wenn der Schleifenzähler am Ende jedes Durchlaufs um einen anderen Wert als 1 erhöht werden soll, verwenden Sie die Funktion Step:

Dim I

For I = 1 To 10 Step 0.5

   ' ... Innenteil der Schleife

Next I

In dem vorangehenden Beispiel wird der Zähler am Ende jedes Durchlaufs um 0,5 erhöht und die Schleife wird insgesamt 19-mal ausgeführt.

Sie können auch negative Iterationswerte verwenden:

Dim I

For I = 10 To 1 Step -1

   ' ... Innenteil der Schleife

Next I

In diesem Beispiel beginnt der Zähler bei 10 und wird am Ende jedes Durchlaufs um 1 verringert, bis der Zähler gleich 1 ist.

Die Anweisung Exit For gestattet das vorzeitige Verlassen einer For-Schleife. Im folgenden Beispiel wird die Schleife während des fünften Durchlaufs abgebrochen:

Dim I

For I = 1 To 10

   If I = 5 Then 
      Exit For 
   End If

   ' ... Innenteil der Schleife

Next I

Hinweis –

Die in VBA vorhandene Schleifenvariante For Each...Next wird in StarOffice Basic nicht unterstützt.


Do...Loop

Die Do...Loop-Schleife ist nicht an eine festgelegte Anzahl von Durchläufen gebunden. Stattdessen wird die Do...Loop-Schleife solange ausgeführt, bis eine bestimmte Bedingung erfüllt ist. Es gibt vier Varianten der Do...Loop-Schleife (in den folgenden Beispielen stellt A > 10 eine beliebige Bedingung dar):

  1. Die Do While...Loop-Variante

    Do While A > 10
       ' ... Schleifenkörper
    Loop

    prüft vor jedem Durchlauf, ob die Bedingung noch erfüllt ist, und führt nur dann den Schleifenrumpf aus.

  2. Die Do Until...Loop-Variante

    Do Until A > 10
       ' ... Schleifenkörper
    Loop

    führt die Schleife aus, bis die Bedingung nicht mehr erfüllt ist.

  3. Die Do...Loop While-Variante

    Do
       ' ... Schleifenkörper
    Loop While A > 10

    prüft die Bedingung nur nach dem ersten Schleifendurchlauf und bricht ab, wenn diese erfüllt ist.

  4. Die Do...Loop Until-Variante

    Do
       ' ... Schleifenkörper
    Loop Until A > 10

    prüft ebenfalls nach dem ersten Durchlauf ihre Bedingung, führt die Schleife jedoch so lange aus, bis die Bedingung nicht mehr erfüllt ist.

Wie die For...Next-Schleife verfügt die Do...Loop-Schleife auch über einen Befehl zum Abbrechen. Mit dem Befehl Exit Do kann eine Schleife an jeder Stelle innerhalb der Schleife verlassen werden.

Do 
   If A = 4 Then
      Exit Do
   End If

   ' ... Schleifenkörper
While A > 10

Programmierbeispiel: Sortieren mit verschachtelten Schleifen

Es gibt zahlreiche Methoden, um Schleifen einzusetzen, beispielsweise zum Durchsuchen von Listen, zum Zurückgeben von Werten oder zum Ausführen komplexer mathematischer Aufgaben. Das folgende Beispiel ist ein Algorithmus, der mit Hilfe von Schleifen eine Liste nach Namen sortiert.

Sub Sort
   Dim Entry(1 To 10) As String
   Dim Count As Integer
   Dim Count2 As Integer
   Dim Temp As String

   Entry(1) = "Patty"
   Entry(2) = "Kurt"
   Entry(3) = "Thomas"
   Entry(4) = "Michael"
   Entry(5) = "David"
   Entry(6) = "Cathy"
   Entry(7) = "Susie"
   Entry(8) = "Edward"
   Entry(9) = "Christine"
   Entry(10) = "Jerry"

   For Count = 1 To 10
       For Count2 = Count + 1 To 10
         If Entry(Count) > Entry(Count2) Then
            Temp = Entry(Count)
            Entry(Count) = Entry(Count2)
            Entry(Count2) = Temp
         End If
       Next Count2
    Next Count

    For Count = 1 To 10
       Print Entry(Count)
    Next Count
End Sub

Die Werte werden so lange mehrere Male paarweise vertauscht, bis sie schließlich in aufsteigender Reihenfolge sortiert sind. Wie Blasen wandern die Variablen nach und nach an ihre richtige Position. Aus diesem Grund ist dieser Algorithmus auch als Bubble Sort (Blasensortierung) bekannt.

Prozeduren und Funktionen

Dreh- und Angelpunkt bei der Strukturierung eines Programms bilden Prozeduren und Funktionen. Sie stellen die Rahmenbedingungen zur Verfügung, um ein komplexes Problem in verschiedene Teilaufgaben untergliedern zu können.

Prozeduren

Eine Prozedur führt eine Aktion aus, ohne einen expliziten Wert zurückzugeben. Ihre Syntax lautet

Sub Test

   ' ... hier steht der eigentliche Code der Prozedur

End Sub

Das Beispiel definiert eine Prozedur namens Test, die Code enthält, auf den von jedem Punkt im Programm zugegriffen werden kann. Der Aufruf erfolgt durch Eingabe des Prozedurnamens an der relevanten Stelle im Programm:

Test

Funktionen

Eine Funktion fasst wie eine Prozedur einen auszuführenden Programmblock als eine logische Einheit zusammen, liefert im Gegensatz zu der Prozedur aber einen Rückgabewert.

Function Test

   ' ... hier steht der eigentliche Code der Funktion

   Test = 123
End Function 

Die Zuordnung des Rückgabewerts erfolgt durch eine einfache Zuweisung. Die Zuweisung muss nicht unbedingt am Ende der Funktion stehen, sondern kann an einer beliebigen Stelle innerhalb der Funktion erfolgen.

Die vorangehende Funktion lässt sich innerhalb eines Programms wie folgt aufrufen:

Dim A

A = Test

Der Code definiert eine Variable A und weist ihr das Ergebnis der Funktion Test zu.

Innerhalb der Funktion kann der Rückgabewert mehrfach überschrieben werden. Wie bei einer klassischen Variablenzuweisung gibt die Funktion in diesem Beispiel den Wert zurück, der ihr zuletzt zugewiesen wurde.

Function Test

   Test = 12

   ' ...

   Test = 123

End Function

In diesem Beispiel ist der Rückgabewert der Funktion 123.

Wird eine Zuweisung abgebrochen, gibt die Funktion einen Null-Wert zurück (Zahl 0 für numerische Werte, leere Zeichenfolge für Strings).

Der Rückgabewert einer Funktion kann von einem beliebigen Typ sein. Die Deklaration des Typs erfolgt wie eine Variablendeklaration:

Function Test As Integer

   ' ... hier steht der eigentliche Code der Funktion

End Function

Wird die Angabe eines expliziten Werts abgebrochen, wird dem Rückgabewert der Typ Variant zugewiesen.

Vorzeitiges Abbrechen von Prozeduren und Funktionen

In StarOffice Basic können Sie mit den Befehlen Exit Sub und Exit Function eine Prozedur oder Funktion vorzeitig abbrechen, beispielsweise zur Fehlerbehandlung. Diese Befehle beenden die Prozedur oder Funktion und bringen das Programm zurück an die Stelle, an der die Prozedur oder Funktion aufgerufen wurde.

Das folgende Beispiel zeigt eine Prozedur, die ihre Ausführung abbricht, wenn die Variable ErrorOccured den Wert True besitzt.

Sub Test
   Dim ErrorOccured As Boolean

   ' ...

   If ErrorOccured Then
      Exit Sub
   End If

   ' ...

End Sub

Übergeben von Parametern

Funktionen und Prozeduren können einen oder mehrere Parameter entgegennehmen. Obligatorische Parameter müssen in Klammern nach dem Funktions- oder Prozedurnamen aufgelistet werden. Das Beispiel

Sub Test (A As Integer, B As String)
End Sub

definiert eine Prozedur, die einen Integer-Wert A und eine Zeichenfolge B als Parameter erwartet.

Parameter werden in StarOffice Basic normalerweise als Referenz (by reference) übergeben. Änderungen der Variablen bleiben beim Verlassen der Prozedur oder Funktion erhalten:

Sub Test
   Dim A As Integer
   A = 10
   ChangeValue(A)
   ' Der Parameter A hat nun den Wert 20
End Sub
Sub ChangeValue(TheValue As Integer)
    TheValue = 20
End Sub

In diesem Beispiel wird der in der Funktion Test definierte Wert A als Parameter an die Funktion ChangeValue übergeben. Der Wert wird dann zu 20 geändert und an TheValue übergeben. Dieser Wert bleibt bei Verlassen der Funktion erhalten.

Parameter können auch als Wert (by value) übergeben werden, wenn der ursprünglich übergebene Wert von folgenden Änderungen des Parameters unberührt bleiben soll. Um festzulegen, dass ein Parameter als Wert übergeben werden soll, muss der Variablendeklaration im Kopfbereich der Funktion das Schlüsselwort ByVal vorangestellt sein.

Tauschen wir im vorangehenden Beispiel die Funktion ChangeValue durch die Funktion

Sub ChangeValue(ByVal TheValue As Integer)
   TheValue = 20
End Sub

aus, bleibt die übergeordnete Variable A von der Änderung unberührt. Nach dem Aufruf der Funktion ChangeValue hat die Variable A weiterhin den Wert 10.


Hinweis –

Die Methode für die Übergabe von Parametern an Prozeduren und Funktionen in StarOffice Basic ist mit der in VBA weitgehend identisch. Standardmäßig werden Parameter als Referenz (by reference) übergeben. Um Parameter als Werte (by value) zu übergeben, verwenden Sie das Schlüsselwort ByVal. In VBA können Sie außerdem das Schlüsselwort ByRef verwenden, um zu erzwingen, dass ein Parameter als Referenz (by reference) übergeben wird. StarOffice Basic unterstützt dieses Schlüsselwort nicht, weil es sich hierbei bereits um das Standardverfahren in StarOffice Basic handelt.


Optionale Parameter

Funktionen und Prozeduren lassen sich nur dann aufrufen, wenn beim Aufruf sämtliche erforderlichen Parameter übergeben werden.

In StarOffice Basic können Sie Parameter als optional definieren, d. h., wenn die entsprechenden Werte in einem Aufruf fehlen, übergibt StarOffice Basic leere Parameter. In dem Beispiel

Sub Test(A As Integer, Optional B As Integer)

End Sub

ist der Parameter A obligatorisch, der Parameter B hingegen optional.

Die Funktion IsMissing prüft, ob ein Parameter übergeben oder ausgelassen wurde.

Sub Test(A As Integer, Optional B As Integer)
   Dim B_Local As Integer

   ' Prüfung, ob Parameter B tatsächlich vorhanden ist
   If Not IsMissing (B) Then
      B_Local = B      ' Parameter B vorhanden
   Else
      B_Local = 0      ' Parameter B fehlt -> Standardwert 0
   End If

   ' ... Start der eigentlichen Funktion

End Sub

Das Beispiel testet zunächst, ob der Parameter B übergeben wurde, und überträgt exakt diesen Parameter gegebenenfalls in die interne Variable B_Local. Fehlt der betreffende Parameter, wird anstelle des übergebenen Parameters ein Standardwert (hier der Wert 0) an B_Local übergeben.


Hinweis –

Das in VBA vorhandene Schlüsselwort ParamArray wird von StarOffice Basic nicht unterstützt.


Rekursion

Rekursion ist jetzt in StarOffice Basic möglich. Unter einer rekursiven Prozedur oder Funktion versteht man, dass diese die Fähigkeit besitzen, sich selbst aufzurufen, bis sie erkennen, dass eine Grundbedingung erfüllt ist. Wenn die Funktion mit der Grundbedingung aufgerufen wird, wird ein Ergebnis zurückgegeben.

Das folgende Beispiel verwendet eine rekursive Funktion zur Berechnung der Fakultät der Zahlen 42, -42 und 3.14:

Sub Main
    Msgbox CalculateFactorial(  42 )    ' Zeigt 1,40500611775288E+51 an
    Msgbox CalculateFactorial( -42 )    ' Zeigt "Ungültige Zahl für Fakultät!" an
    Msgbox CalculateFactorial( 3.14 )   ' Zeigt "Ungültige Zahl für Fakultät an!"
End Sub

Function CalculateFactorial( Number )
    If Number < 0 Or Number <> Int( Number ) Then
        CalculateFactorial = "Ungültige Zahl für Fakultät!"
    ElseIf Number = 0 Then
        CalculateFactorial = 1
    Else
        ' Dies ist der rekursive Aufruf: 
        CalculateFactorial = Number * CalculateFactorial( Number - 1 )
    Endif
End Function 

Das Beispiel gibt die Fakultät der Zahl 42 zurück, indem rekursiv die Funktion CalculateFactorial aufgerufen wird, bis die Grundbedingung von 0! = 1 erfüllt ist.


Hinweis –

Die mögliche Rekursionstiefe ist in Abhängigkeit von der Softwareplattform unterschiedlich. Für Windows liegt die Rekursionstiefe bei 5800. Für Solaris und Linux wird die Größe des Stacks (Stapels) bewertet und dann die Rekursionstiefe berechnet.


Fehlerbehandlung

Eine korrekte Behandlung von Fehlersituationen gehört mit zu den aufwendigsten Aufgaben bei der Programmierung. StarOffice Basic bietet eine ganze Reihe von Hilfsmitteln an, um diese zu vereinfachen.

Die Anweisung "On Error"

Kern einer jeden Fehlerbehandlung ist die Anweisung On Error:

Sub Test
   On Error Goto ErrorHandler

   ' ... Aufgabe ausführen, bei der ein Fehler passieren kann

Exit Sub

ErrorHandler:

   ' ... individueller Code zur Fehlerbehandlung

End Sub

Die Zeile On Error Goto ErrorHandler definiert, wie StarOffice Basic im Falle eines Fehlers verfahren soll. Der Goto ErrorHandler gewährleistet, dass StarOffice Basic die aktuelle Programmzeile verlässt und dann den ErrorHandler:-Code ausführt.

Die Anweisung "Resume"

Der Befehl Resume Next führt das Programm nach Ausführung des Fehler-Handler-Codes ab der Zeile weiter aus, die auf die Zeile folgt, in der der Fehler im Programm aufgetreten ist:

ErrorHandler:

   ' ... individueller Code zur Fehlerbehandlung

   Resume Next

Mit dem Befehl Resume Proceed geben Sie eine Sprungmarke zur Fortsetzung des Programms nach der Fehlerbehandlung an:

ErrorHandler:

   ' ... individueller Code zur Fehlerbehandlung

   Resume Proceed

Proceed:

   ' ... hier fährt das Programm nach dem Fehler fort

Um ein Programm ohne eine Fehlermeldung bei Auftreten eines Fehlers fortzuführen, verwenden Sie folgendes Format:

Sub Test
   On Error Resume Next

   ' ... Aufgabe ausführen, bei der ein Fehler auftreten kann

End Sub

Verwenden Sie den Befehl On Error Resume Next mit großer Vorsicht, da seine Ergebnisse globale Auswirkungen haben. Weitere Informationen finden Sie unter Tipps für eine strukturierte Fehlerbehandlung.

Abfragen von Fehlerinformationen

Bei der Fehlerbehandlung ist es sinnvoll, über eine Beschreibung des Fehlers zu verfügen und zu wissen, an welcher Stelle und aus welchem Grund er aufgetreten ist:

  • Die Variable Err enthält die Nummer des aufgetretenen Fehlers.

  • Die Variable Error$ enthält eine Beschreibung des Fehlers.

  • Die Variable Erl enthält die Nummer der Zeile, in der der Fehler aufgetreten ist.

Der Aufruf

MsgBox "Error " & Err & ": " & Error$ & " (line : " & Erl & ")"

zeigt, wie die Fehlerinformationen in einem Meldungsfenster angezeigt werden können.


Hinweis –

Während in VBA die Fehlermeldungen in einem Statistikobjekt namens Err zusammengefasst werden, stellt StarOffice Basic die Variablen Err, Error$ und Erl zur Verfügung.


Die Statusinformationen sind so lange gültig, bis das Programm auf einen neuen Resume- oder On Error-Befehl trifft, woraufhin die Informationen zurückgesetzt werden.


Hinweis –

In VBA wird der Fehlerstatus nach Auftreten eines Fehlers mit der Methode Err.Clear des Err-Objekts zurückgesetzt. In StarOffice Basic wird dies mit den Befehlen On Error bzw. Resume durchgeführt.


Tipps für eine strukturierte Fehlerbehandlung

Sowohl der Definitionsbefehl On Error als auch der Rückgabebefehl Resume sind Varianten des Goto-Konstrukts.

Wenn Sie Ihren Code sauber strukturieren möchten, um die Erzeugung von Fehlern bei der Verwendung dieses Konstrukts zu vermeiden, sollten Sie keine Sprungbefehle benutzen, ohne sie zu überwachen.

Gehen Sie bei der Verwendung des Befehls On Error Resume Next mit Sorgfalt vor, da hierdurch alle geöffneten Fehlermeldungen verworfen werden.

Die beste Lösung besteht darin, für die Fehlerbehandlung im Programm nur einen Ansatz zu verwenden. Trennen Sie die Fehlerbehandlung vom eigentlichen Programmcode und springen Sie nicht mehr zurück in den Originalcode, nachdem ein Fehler aufgetreten ist.

Im Folgenden finden Sie ein Beispiel für eine Fehlerbehandlungsprozedur:

Sub Example

   ' Fehler-Handler am Anfang der Funktion definieren 
   On Error Goto ErrorHandler

   ' ... Hier steht der eigentliche Programmcode

   ' Fehlerbehandlung deaktivieren 
   On Error Goto 0

   ' Ende der regulären Programmausführung 
Exit Sub

' Startpunkt der Fehlerbehandlung 
ErrorHandler:

   ' Prüfen, ob der Fehler erwartet wurde 
   If Err = ExpectedErrorNo Then 
      ' ... Bearbeitung des Fehlers 
   Else 
      ' ... Warnhinweis wegen unerwartetem Fehler 
   End If

   On Error Goto 0            ' Fehlerbehandlung deaktivieren
End Sub

Diese Prozedur beginnt mit der Definition eines Fehler-Handlers, gefolgt von dem eigentlichen Programmcode. Am Ende des Programmcodes wird die Fehlerbehandlung mit dem Aufruf On Error Goto 0 deaktiviert und die Ausführung der Prozedur mit dem Befehl Exit Sub beendet (nicht zu verwechseln mit End Sub).

Das Beispiel prüft zuerst, ob die Fehlernummer mit der erwarteten übereinstimmt (wie in der hypothetischen Konstanten ExpectedErrorNo gespeichert), und behandelt den Fehler dann entsprechend. Beim Auftreten eines anderen Fehlers gibt das System einen Warnhinweis aus. Die Überprüfung der Fehlernummer ist wichtig, damit unerwartete Fehler erkannt werden können.

Der Aufruf On Error Goto 0 am Ende des Codes setzt die Statusinformationen für den Fehler (den Fehlercode in der Systemvariablen Err) wieder zurück, damit ein später auftretender Fehler eindeutig identifiziert werden kann.