有效率地傳遞自變數
除非您另有指定,否則所有自變數都會以傳址方式傳遞至程式。 這是有效率的,因為所有以傳址方式傳遞的自變數都需要相同的時間來傳遞,而且不論自變數 的數據類型為何,程式內 (4 個字節) 相同的空間量。
如果您在程式的宣告中包含 ByVal 關鍵詞,則可以依值傳遞自變數。 根據自變數的數據類型,以傳值方式傳遞的自變數會取用程式內 2 到 16 個字節的自變數。 相較於較小的數據類型,較大的數據類型需要稍微長一點的時間才能傳遞。 因此, String 和 Variant 數據類型通常不應該以傳值的方式傳遞。
依值傳遞自變數會複製原始 變數。 程式內自變數的變更不會反映回原始變數。 例如:
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 支援與意見反應。