# Sub..end sub

L'istruzione di controllo sub..end sub definisce una subroutine che può essere richiamata da un'istruzione call.

Sintassi:

Sub name [ ( paramlist )] statements end sub

Gli argomenti vengono copiati nella subroutine e, se i relativi parametri reali nell'istruzione call corrispondono a un nome di variabile, vengono copiati nuovamente quando si chiude la subroutine.

Se una subroutine presenta più parametri formali di quelli effettivi passati da un'istruzione call, i parametri extra vengono inizializzati su NULL e possono essere utilizzati come variabili locali all'interno della subroutine.

Argomenti:

Argomenti

| Argomento | Descrizione |
| --- | --- |
| name | Il nome della subroutine. |
| paramlist | Un elenco separato da virgole di nomi di variabili per i parametri formali della subroutine. Può essere utilizzato come qualsiasi variabile all'interno della subroutine. |
| statements | Qualsiasi gruppo di una o più istruzioni dello script di Qlik Sense. |

Limiti:

* Poiché sub è un'istruzione di controllo che termina con un punto e virgola o con un carattere di fine riga, ciascuna delle due clausole corrispondenti (sub e end sub) deve essere contenuta in una sola riga.

* Quando si definisce una routine secondaria con `Sub..end sub`all'interno di un'istruzione di controllo, ad esempio `if..then`, è possibile richiamare la routine secondaria solo dall'interno della stessa istruzione di controllo.

Esempio 1:

`Sub INCR 
 (I,J)` `I = I + 
 1` `Exit Sub 
 when I < 10` `J = J + 
 1` `End Sub` `Call INCR 
 (X,Y)`

Esempio 2: - trasferimento parametri

`Sub ParTrans 
 (A,B,C)` `A=A+1` `B=B+1` `C=C+1` `End Sub` `A=1` `X=1` `C=1` `Call ParTrans 
 (A, (X+1)*2)`

Dall'esempio precedente risulta che localmente, all'interno della subroutine, A verrà inizializzato su 1, B verrà inizializzato su 4 e C verrà inizializzato su NULL.

Quando si chiude la subroutine, la variabile globale A otterrà 2 come valore (ricopiato dalla subroutine). Il secondo parametro reale “(X+1)\*2” non verrà ricopiato dato che non si tratta di una variabile. Infine, la variabile globale C non verrà influenzata dalla chiamata della subroutine.

## Ulteriori informazioni

* [Call](https://help.qlik.com/it-IT/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptControlStatements/Call.htm)
* [Exit](https://help.qlik.com/it-IT/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptControlStatements/Exit.htm)
* [End](https://help.qlik.com/it-IT/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptControlStatements/End.htm)