CALL 函數

Excel VBA 中,CALL 是一個用來呼叫程式中的其他子程序或函數的關鍵字。它通常用來調用您自己在程式碼中定義的函數或子程序,或者在 Excel 中用來呼叫外部的動態連結庫(DLL)中的函數。

不過,在 VBA 中,CALL 並不是必須的,您可以直接調用一個子程序或函數,而不必使用 CALL,但它仍然被保留作為可選的語法。


語法

CALL 函數名(參數1, 參數2, ...)
  • 函數名:要呼叫的函數或子程序名稱。
  • 參數1, 參數2, …(可選):傳遞給該函數或子程序的參數。

注意CALL 可以與帶參數的函數或無參數的函數一起使用,但在 VBA 中,它是可選的,您可以選擇省略。


範例

  1. 使用 CALL 調用子程序: 假設有一個簡單的子程序 MyProcedure,它顯示一條消息:
    Sub MyProcedure()
        MsgBox "Hello, world!"
    End Sub
    

    如果您要從另一個子程序中呼叫它,可以使用 CALL

    Sub AnotherProcedure()
        Call MyProcedure
    End Sub
    

    這樣,AnotherProcedure 會呼叫 MyProcedure 並顯示一條消息 “Hello, world!”。

  2. 不使用 CALL 直接調用函數: 其實在 VBA 中,您可以省略 CALL,直接調用函數或子程序:
    Sub AnotherProcedure()
        MyProcedure
    End Sub
    
  3. 傳遞參數給函數: 假設您有一個帶有參數的函數,像是計算總和:
    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 可以用來執行該資源中的函數。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *