Contenuto
Indice 🔎︎

# Istruzione Sub

Definisce una subroutine.

Le istruzioni Sub, Function e Property sono metodi simili, senza distinzione. Tutte ricevono dei parametri attraverso un riferimento e consentono di restituirli modificati. Il compilatore di LibreOffice Basic accetta che la sintassi dei loro rispettivi argomenti sia intercambiabile.

### Sintassi:

    [Private | Public] Sub name[(argument1 [As typename][, argument2[char][,...]])]
        ' istruzioni
        [Exit Sub]
        ' istruzioni
    End Sub

### Parametri:

name: nome della subroutine.

arguments: parametri facoltativi da passare alla subroutine.

##### frammento di argomento

          {[Optional [ByRef|ByVal]]|ParamArray} argument {{As typename|char}[ = expression]|[()]As Variant}

##### Parametri

Optional: l'argomento non è obbligatorio.

ByRef: l'argomento viene passato come riferimento. ByRef è l'impostazione predefinita.

ByVal: l'argomento viene passato come valore. Il suo valore può essere modificato dalla routine richiamata.

char: carattere di dichiarazione del Tipo.

typename: nome del tipo di dati primitivo. Si possono specificare anche tipi definiti in librerie o moduli.

= expression: specifica un valore predefinito per l'argomento, che rispetti il tipo dichiarato. Optional: per ogni argomento di questo tipo è necessario specificare un valore predefinito.

ParamArray: usate ParamArray quando il numero di parametri non è predeterminato. Uno scenario tipico è quello di una funzione di Calc definita dall'utente. L'uso di ParamArray dovrebbe essere limitato come ultimo parametro di una routine.

L'uso di ParamArray o = expression richiede che Option Compatible sia posizionato, in un modulo, prima della parte eseguibile del programma.

Se usate Option VBASupport 1, gli argomenti Optional senza un valore predefinito (= espressione) vengono inizializzati in base al loro tipo di dati, fatta eccezione per Variant.

##### frammento di nome di tipo

          {Boolean|Byte|Currency|Date|Double|Integer|Long|Object|Single|String|Variant}

##### frammento di carattere

          { % | & | ! | # | $ | @ }

### Esempi:

    Sub ExampleExit
    Dim sReturn As String
    Dim sListArray(10) As String
    Dim siStep As Single
        For siPasso = 0 to 10 ' Popola la matrice con dati di prova
            sListArray(siStep) = chr$(siStep + 65)
            MsgBox sListArray(siStep)
        Next siStep
        sReturn = LinSearch(sListArray(), "B")
        Print sReturn
    End Sub

    Function LinSearch( sList(), sItem As String ) As Integer
    Dim iCount As Integer
    ' Linsearch ricerca un TextArray:sList() per una TextEntry:
    ' Il valore restituito è l'indice della voce o 0 (Null)
        For iCount=1 To Ubound( sList() )
            If sList( iCount ) = sItem Then
                Exit For ' sVoce trovato
            End If
        Next iCount
        If iCount = Ubound( sList() ) Then iCount = 0
        LinSearch = iCount
    End Function