Inhalte
Index 🔎︎

# Arbeiten mit Prozeduren und Funktionen

Im Folgenden wird die grundlegende Verwendung von Prozeduren und Funktionen in LibreOffice Basic beschrieben.

Wenn Sie ein neues Modul erstellen, fügt LibreOffice Basic automatisch eine SUB namens "Main" ein. Dieser Standardname hat nichts mit der Reihenfolge oder dem Ausgangspunkt eines LibreOffice-Basic-Projekts zu tun. Sie können diese SUB auch problemlos umbenennen.

Es gelten gewisse Einschränkungen für die Namen von öffentlichen Variablen, Prozeduren (sub) und Funktionen (function). So ist es nicht zulässig, den Namen eines Moduls derselben Makrobibliothek zu verwenden.

Prozeduren (SUB-Blöcke) und Funktionen (FUNCTION-Blöcke) helfen Ihnen dabei, einen strukturierten Überblick über Ihr Programm zu behalten, indem sie das Programm in logische Abschnitte aufteilen.

Ein Vorteil von Prozeduren und Funktionen liegt darin, einmal entwickelten Programmcode für bestimmte Aufgabenkomponenten in anderen Projekten verwenden zu können.

## Übergeben von Variablen an Prozeduren (SUB) und Funktionen (FUNCTION)

Variablen können sowohl an Prozeduren als auch an Funktionen übergeben werden. SUB oder FUNCTION müssen jedoch so deklariert werden, dass sie Parameter erwartet:

    Sub SubName(Parameter1 As Type, Parameter2 As Type,...)
    Programmcode
    End Sub

Die SUB wird mit folgender Syntax aufgerufen:

    SubName(Value1, Value2,...)

Die an eine SUB übergebenen Parameter müssen zu den in der SUB-Deklaration definierten Parametern passen.

Das Gleiche gilt für die Verwendung von FUNCTION, mit dem Unterschied, dass sie ein Funktionsergebnis zurückliefern. Sie bestimmen das Funktionsergebnis, indem Sie den Wert, den die Funktion zurückliefern soll, dem Funktionsnamen zuweisen:

    Function FunctionName(Parameter1 As Type, Parameter2 As Type,...) As Type
    Programmcode
    FunktionsName=Ergebnis
    End Function

FUNCTION wird mit folgender Syntax aufgerufen:

    Variable=FunktionsName(Parameter1, Parameter2,...)

Außerdem können Sie eine Prozedur oder Funktion mit dem vollständig qualifizierten Namen aufrufen:
Library.Module.Macro()
Um beispielsweise den Autotext-Makro in der Bibliothek Gimmicks aufzurufen, geben Sie den folgenden Befehl ein:
Gimmicks.AutoText.Main()

## Übergeben von Variablen als Wert oder Referenz

Sie können Parameter entweder als Referenz oder als Wert an SUB oder FUNCTION übergeben. Falls nicht anders festgelegt, werden Parameter standardmäßig immer als Referenz übergeben. Dies bedeutet, dass SUB beziehungsweise FUNCTION den Parameter erhält und seinen Wert lesen und ändern kann.

Um einen Parameter als Wert zu übergeben, fügen Sie beim Aufruf SUB oder FUNCTION das Schlüsselwort "ByVal" vor dem Parameter ein, beispielsweise:

    Ergebnis = Funktion(ByVal Parameter)

In diesem Fall kann die Funktion den ursprünglichen Inhalt des Parameters nicht ändern, da sie nur den Wert erhält, nicht jedoch den Parameter selber.

## Gültigkeitsbereich von Variablen

Eine Variable innerhalb von SUB oder FUNCTION definiert bleibt dort nur solange gültig, bis die Prozedur verlassen wird. Diese ist als eine "lokale" Variable bekannt. In vielen Fällen benötigen Sie eine Variable, die in allen Prozeduren, in jedem Modul aller Bibliotheken gültig ist, oder nachdem SUB oder FUNCTION ausgeführt wird.

### Deklarieren von Variablen außerhalb von SUB oder FUNCTION

    Global VarName As TYPENAME

Diese Variable bleibt während die gesamte LibreOffice-Sitzung gültig.

    Public VarName As TYPENAME

Die Variable hat in allen Modulen Gültigkeit.

    Private VarName As TYPENAME

Die Variable hat nur im Modul Gültigkeit.

    Dim VarName As TYPENAME

Die Variable hat nur im Modul Gültigkeit.

### Beispiele für private Variablen

Durch das Setzen von CompatibilityMode(true) werden private Variablen bezüglich eines einzelnen Moduls als privat behandelt.

    ' ***** Module1 *****
    Private myText As String
    Sub initMyText
        meinText = "Hallo"
        Print "In Modul 1 : ", meinText
    End Sub

    ' ***** Module2 *****
    'Option Explicit
    Sub demoBug
        CompatibilityMode( true )
        initMyText
        ' Gibt jetzt einen leeren String zurück
        ' (oder löst einen Fehler für Option Explicit aus)
        Print "Jetzt in Modul 2 : ", meinText
    End Sub

### Speichern von Variableninhalten nach dem Verlassen von SUB oder FUNCTION

    Static VarName As TYPENAME

Die Variable behält ihren Wert bis zum nächsten Einstieg in FUNCTION oder SUB. Die Deklaration muss innerhalb von SUB oder FUNCTION stehen.

## Festlegen des Rückgabewert-Typs von FUNCTION

Um den Typ der Rückgabevariablen einer Funktion zu definieren, hängen Sie wie bei einer Variablen ein Typ-Deklarationszeichen an den Funktionsnamen an oder geben den Typ am Ende der Parameterliste durch "As" und das entsprechende Schlüsselwort an. Beispiel:

    Function WordCount(WordText As String) As Integer