在 Excel VBA 中,CALL 是一個用來呼叫程式中的其他子程序或函數的關鍵字。它通常用來調用您自己在程式碼中定義的函數或子程序,或者在 Excel 中用來呼叫外部的動態連結庫(DLL)中的函數。
不過,在 VBA 中,CALL 並不是必須的,您可以直接調用一個子程序或函數,而不必使用 CALL,但它仍然被保留作為可選的語法。
語法
CALL 函數名(參數1, 參數2, ...)
- 函數名:要呼叫的函數或子程序名稱。
- 參數1, 參數2, …(可選):傳遞給該函數或子程序的參數。
注意:
CALL可以與帶參數的函數或無參數的函數一起使用,但在 VBA 中,它是可選的,您可以選擇省略。
範例
- 使用
CALL調用子程序: 假設有一個簡單的子程序MyProcedure,它顯示一條消息:Sub MyProcedure() MsgBox "Hello, world!" End Sub如果您要從另一個子程序中呼叫它,可以使用
CALL:Sub AnotherProcedure() Call MyProcedure End Sub這樣,
AnotherProcedure會呼叫MyProcedure並顯示一條消息 “Hello, world!”。 - 不使用
CALL直接調用函數: 其實在 VBA 中,您可以省略CALL,直接調用函數或子程序:Sub AnotherProcedure() MyProcedure End Sub - 傳遞參數給函數: 假設您有一個帶有參數的函數,像是計算總和:
Function AddNumbers(a As Integer, b As Integer) As Integer AddNumbers = a + b End Function您可以使用
CALL來呼叫並傳遞參數:Sub TestAdd() Dim result As Integer Call AddNumbers(5, 10) End Sub或者省略
CALL:Sub TestAdd() Dim result As Integer result = AddNumbers(5, 10) MsgBox result '顯示 15 End Sub
使用 CALL 呼叫外部函數(動態連結庫)
CALL 在 VBA 中也可以用來呼叫外部動態連結程式庫(DLL)中的函數。這通常需要在 VBA 中先定義該函數的介面,然後用 CALL 來呼叫它。
例如,假設有一個名為 user32.dll 的 DLL 檔案,您可以定義其介面並呼叫其中的某個函數。這是一個更進階的操作,通常在需要與外部應用程式或硬體進行互動時使用。
Declare PtrSafe Function MessageBox Lib "user32.dll" _
Alias "MessageBoxW" (ByVal hwnd As LongPtr, _
ByVal lpText As String, ByVal lpCaption As String, _
ByVal uType As Long) As Long
Sub CallMessageBox()
Call MessageBox(0, "Hello from VBA!", "VBA MessageBox", 0)
End Sub
這段代碼使用 CALL 語法來呼叫 user32.dll 中的 MessageBoxW 函數,顯示一個消息框。
結論
CALL主要用於呼叫 VBA 中的函數或子程序,雖然它是可選的,但在某些情況下仍然可以幫助提高代碼的可讀性。- 當與外部資源(如 DLL)交互時,
CALL可以用來執行該資源中的函數。