Module
Contents
Index 🔎︎

# Använda procedurer och funktioner

I följande avsnitt beskrivs den grundläggande användningen av procedurer och funktioner i LibreOffice Basic.

När du skapar en ny modul infogar LibreOffice Basic automatiskt en subrutin som heter "Main". Standardnamnet har inget att göra med ordningen eller startpunkten för ett LibreOffice Basic-projekt. Du kan byta namn på den här subrutinen om du vill.

Det finns vissa begränsningar i hur publika variabler, subrutiner och funktioner kan namnges. Du kan inte använda samma namn som på moduler som finns i samma bibliotek.

Genom att använda procedurer (SUB) och funktioner (FUNCTIONS) kan du upprätthålla en strukturerad översikt genom att dela upp ett program i logiska delar.

En fördel med procedurer och funktioner är att när du har utvecklat en programkod som innehåller aktivitetskomponenter kan du använda samma kod i andra projekt.

## Skicka procedurer (SUB) och funktioner (FUNCTION)

Variabler kan skickas till både procedurer och funktioner. Du måste ange att en subrutin eller funktion ska förvänta sig parametrar:

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

    Programkod

    End Sub

Du anropar en SUB med följande syntax:

    SubName(Value1, Value2,...)

De parametrar som skickas till en SUB måste matcha de som angetts i subrutin-deklarationen.

Detsamma gäller för en funktion som ska returnera ett funktionsresultat. Resultatet kan definieras precis före slutet av funktionen genom att funktionsnamnet och en parameter tilldelas värdet som ska returneras av funktionen. (se exemplet).

    Function FunctionName(Parameter1 As Type, Parameter2 As Type,...) As Type

    Programkod

    FunctionName=Resultat

    End Function

Du anropar en FUNCTION med följande syntax:

    Variabel=FunctionName(Parameter1, Parameter2,...)

Du kan också använda det fullständiga namnet om du vill anropa en procedur eller funktion:
Library.Module.Macro()
Om du till exempel vill anropa makrot Autotext från biblioteket Gimmicks använder du följande kommando:
Gimmicks.AutoText.Main()

## Skicka variabler efter värde eller referens

Parametrar kan skickas till en subrutin eller en funktion efter antingen referens eller värde. Om inget annat angetts skickas en parameter alltid efter referens. Det betyder att en subrutin eller en funktion får parametern och kan läsa och ändra dess värde.

Om du vill skicka en parameter efter värde infogar du nyckelordet "ByVal" framför parametern när du anroper en subrutin eller funktion, exempelvis:

    Resultat = Funktion(ByVal Parameter)

I det här fallet ändras inte det ursprungliga parameterinnehållet eftersom bara värdet och inte själva parametern skickas till funktionen.

## Variabelområden

En variabel som definieras i en subrutin eller funktion är bara giltig tills proceduren avslutas. Detta kallas en "lokal" variabel. Ofta måste en variabel vara giltig i alla procedurer, i varje modul, i alla bibliotek, eller efter att en subrutin eller funktion har avslutats.

### Deklarera variabler utanför en SUB eller FUNCTION

    Global Variabelnamn As TYPENAME

Variabeln är giltig så länge som LibreOffice-sessionen pågår.

    Public Variabelnamn As TYPENAME

Variabeln är giltig i alla moduler.

    Private Variabelnamn As TYPENAME

Variabeln är bara giltig i den här modulen.

    Dim Variabelnamn As TYPENAME

Variabeln är bara giltig i den här modulen.

### Exempel på privata variabler

Tvinga privata variabler att vara privata över moduler genom att ange CompatibilityMode(true).

    ' ***** Module1 *****

    Private myText As String

    Sub initMyText

        myText = "Hej"

        Print "In module1 : ", myText

    End Sub

    ' ***** Module2 *****

    'Option Explicit

    Sub demoBug

        CompatibilityMode( true )

        initMyText

        ' Returnerar nu tom sträng

        ' (eller fel uppstår för Option Explicit)

        Print "Now in module2 : ", myText

    End Sub

### Spara variabelinnehåll efter att en subrutin eller funktion avslutats

    Static Variabelnamn As TYPENAME

Variabelns värde bibehålls tills nästa funktion eller subrutin startar. Deklarationen måste anges i en subrutin eller funktion.

## Ange returvärde för en funktion

Om du vill definiera returvärde för funktionen inkluderar du ett typdeklarationstecken efter funktionsnamnet eller typen som indikeras av "As". Ange också motsvarande nyckelord i slutet av parameterlistan, till exempel:

    Function WordCount(WordText As String) As Integer