有效率地傳遞引數

除非您另有指定,否則所有變數都會以傳址方式傳遞至程式。 這是有效率的,因為所有以傳址方式傳遞的引數都需要相同的時間來傳遞,而且不論引數 的資料類型為何,程式內 (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 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 支援與意見反應