有效率地傳遞引數
除非您另有指定,否則所有自變數都會以傳址方式傳遞至程式。 這是有效率的,因為所有以傳址方式傳遞的引數都需要相同的時間來傳遞,而且不論引數 的資料類型為何,程式內 (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 S.
S = 5
Print Factorial(S) ' Displays 120 (the factorial of 5)
Print S ' Displays 5.
若未在函數宣告中包含 ByVal ,上述 Print 語句會顯示 1 和 0。 這是因為 MyVar
接著會參考變數 ,而變數 S
會減少 1,直到它等於 0 為止。
因為 ByVal 會複製引數,所以可讓您將變數傳遞至 Factorial 函式 。 如果宣告引數的程式是另一個資料類型,您就無法以傳址方式傳遞變數。
另請參閱
支援和意見反應
有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應。