共用方式為


有效率地傳遞自變數

除非您另有指定,否則所有變數都會以傳址方式傳遞至程式。 這是有效率的,因為所有以傳址方式傳遞的自變數都需要相同的時間來傳遞,而且不論自變數 的數據類型為何,程式內 (4 個字節) 相同的空間量。

如果您在程式的宣告中包含 ByVal 關鍵詞,則可以依值傳遞自變數。 根據自變數的數據類型,以傳值方式傳遞的自變數會取用程式內 2 到 16 個字節的自變數。 相較於較小的數據類型,較大的數據類型需要稍微長一點的時間才能傳遞。 因此, StringVariant 數據類型通常不應該以傳值的方式傳遞。

依值傳遞自變數會複製原始 變數。 程式內自變數的變更不會反映回原始變數。 例如:

Function Factorial(ByVal MyVar As Integer) ' Function declaration. 
    MyVar = MyVar - 1 
    If MyVar = 0 Then 
        Factorial = 1 
        Exit Function 
    End If 
    Factorial = Factorial(MyVar) * (MyVar + 1) 
End Function 
 
' Call Factorial with a variable N.
Sub Test()
    N = 5 
    Debug.Print Factorial(N) ' Displays 120 (the factorial of 5) 
    Debug.Print N ' Displays 5. 
End Sub

若未在函數宣告中包含 ByVal ,上述 Print 語句會顯示 1 和 0。 這是因為 MyVar 接著會參考變數 ,而變數 S會減少 1,直到它等於 0 為止。

因為 ByVal 會複製自變數,所以可讓您將變數傳遞至 Factorial 函式 。 如果宣告自變數的程式是另一個數據類型,您就無法以傳址方式傳遞變數。

另請參閱

支援和意見反應

有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應