Modul
Indhold
Indholdsfortegnelse 🔎︎

# Brug af procedurer og funktioner

Her følger en beskrivelse af den grundlæggende brug af procedurer og funktioner i LibreOffice Basic.

Når du opretter et nyt modul, vil LibreOffice Basic automatisk indsætte en SUB kaldet "Main". Dette standardnavn har inget at gøre med rækkefølgen eller startpunktet for et LibreOffice Basic projekt. Du kan uden problemer omdøbe denne SUB.

Der gælder visse begrænsninger for navne på dine offentlige variabler, procedurer (sub) og funktioner. Du må ikke bruge det samme navn som på et af modulerne i det samme bibliotek.

Procedurer (SUBS) og funktioner (FUNCTIONS) hjælper dig med at holde et struktureret overblik ved at inddele et program i logisk stykker.

En fordel ved procedurer og funktioner er, at når du har udviklet programkode, som indeholder opgavekomponenter, kan du bruge denne kode i et andet projekt.

## Overførsel af variable til procedurer (SUB) og Funktioner (FUNCTION)

Variable kan overføres til både procedurer og funktioner. SUB eller FUNCTION skal være erklæret til at forvente parametre:

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

SUB'en kaldes ved brug af følgende syntaks:

    SubName(Value1, Value2,...)

Parametrene der bliver overført til en SUB skal passe til de der er angivet i SUB-erklæringen.

Den samme proces gælder for FUNKTIONER. I tilføjelse hertil, returnerer funktioner altid et funktionsresultat. Resultatet af en funktion defineres ved tildeling af returværdien til funktionsnavnet:

    Function FunctionName(Parameter1 As Type, Parameter2 As Type,...) As Type
    Programkode
    FunctionName=Resultat
    End Function

Funktionen kaldes ved brug af følgende syntaks:

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

Du kan også bruge det fuldt kvalificerede navn til at kalde en procedure eller funktion:
Bibliotek.Modul.Makro()
Hvis du for eksempel vil kalde makroen Autotext fra biblioteket Gimmicks, skal du bruge følgende kommando:
Gimmicks.Autotext.Main()

## Overførsel af variable ved værdi eller henvisning

Parametre kan overføres til en SUB eller en FUNCTION enten ved reference eller ved værdi. Medmindre andet er specificeret, vil en parameter altid overføres ved reference. Det betyder, at en SUB eller en FUNCTION får parameteren og kan læse og rette sin værdi.

Hvis du vil overføre en parameter ud fra værdi, indsæt nøgleordet "ByVal" foran parameteren når du kalder en SUB eller en FUNCTION, for eksempel:

    Resultat = Funktion(ByVal-parameter)

I dette tilfælde, vil det originale indhold af parameteren ikke blive ændret af funktionen, siden det kun får værdien og ikke selve parameteren.

## Omfang på variable

En variabel, der er defineret indenfor en SUB eller FUNCTION, forbliver kun gyldig indtil proceduren er afsluttet. Dette er kendt som en "lokal" variabel. I mange tilfælde har du brug for, at en variabel skal være gyldig i alle procedurer, i alle moduler i alle biblioteker, eller efter at en SUB eller FUNCTION er afsluttet.

### Erklæring af variable udenfor en SUB eller FUNCTION

    GLOBAL VarName As TYPENAME

Variablen er gyldig så længe, LibreOffice-sessionen varer.

    PUBLIC VarName As TYPENAME

Denne variabel er gyldig i alle moduler.

    PUBLIC VarName As TYPENAME

Denne variabel er kun gyldig i dette modul.

    PUBLIC VarNavn As TYPENAVN

Denne variabel er kun gyldig i dette modul.

### Eksempel for private variable

Tving private variable til at være private på tværs af moduler med indstillingen CompatibilityMode(true).

    ' ***** Module1 *****
    Private myText As String
    Sub initMyText
        myText = "Hej"
        Print "I modul1: ", minTekst
    End Sub

    ' ***** Module2 *****
    'Option Explicit
    Sub demoBug
        CompatibilityMode( true )
        initMyText
        ' Now returns empty string
        ' (or rises error for Option Explicit)
        Print "Nu i modul2: ", minTekst
    End Sub

### At gemme variabelindhold efter afslutning af en SUB eller FUNCTION

    STATIC VarName As TYPENAME

Variablen bevarer sin værdi indtil næste gang samme FUNCTION eller SUB tilgås. Erklæringen skal findes indenfor en SUB eller en FUNCTION.

## Angivelse af returværditypen af en funktion

Som med variable, medtag et type-erklæringstegn efter funktionsnavnet, eller typen vist med "As" og det tilsvarende nøgleord ved slutningen af parameterlisten for at definere typen af funktionens returværdi, for eksempel:

    Function WordCount(WordText As String) As Integer