# Sub..end sub

sub..end sub 控制陳述式會定義可從 call 陳述式呼叫的副程式。

語法：

Sub name [ ( paramlist )] statements end sub

引數會複製到副程式中，而且如果 call 陳述式中的對應實際參數是變數名稱，將在結束副程式時再次複製回引數。

如果副程式擁有的型式參數比 call 陳述式傳遞的實際參數多，則會將額外的參數初始化為 NULL，且可在副程式內做為本機變數。

由於 sub 陳述式是控制陳述式，因而會以分號或行結束來結束，所以這兩個子句 (sub 與 end sub) 都不能超過行邊界。

引數：

Sub 引數

| 引數 | 描述 |
| --- | --- |
| name | 副程式的名稱。 |
| paramlist | 以逗號分隔副程式型式參數之變數名稱的清單。其可在副程式內做為任何變數。 |
| statements | 是一或多個 QlikView 指令碼陳述式的任何群組。 |

範例 1:

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

範例 2: - 參數傳送

`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)`

以上範例的結果會是在本機的副程式內，A 將初始化為 1、B 將初始化為 4，而 C 將初始化為 NULL。

結束副程式後，全域變數 A 會取得 2 做為值 (從副程式複製回來)。第二個實際參數 “(X+1)\*2” 因為不是變數，所以不會被複製回來。最後，全域變數 C 不會受到副程式呼叫的影響。

## 瞭解更多資訊

* [Call](https://help.qlik.com/zh-TW/qlikview/May2024/Subsystems/Client/Content/QV_QlikView/Scripting/ScriptControlStatements/Call.htm)
* [Exit](https://help.qlik.com/zh-TW/qlikview/May2024/Subsystems/Client/Content/QV_QlikView/Scripting/ScriptControlStatements/Exit.htm)
* [End](https://help.qlik.com/zh-TW/qlikview/May2024/Subsystems/Client/Content/QV_QlikView/Scripting/ScriptControlStatements/End.htm)