Argumente - ByRef und ByVal

Nutze IMMER ByRef und ByVal

Argumente (Parameter) werden in Visual Basic implizit ByRef – als Referenz – übergeben.

Die so übergebenen Argumente können durch die aufgerufene Routine verändert werden. Dies kann gewollt sein, oder auch nicht.

Werden Argumente explizit ByVal übergeben, so bleibt die ursprüngliche Variable unverändert und es wird eine Kopie an die aufgerufene Routine übergeben.

Sub Arguments()
    Dim sMyValue As String
 
    sMyValue = "Hello World!"
    Debug.Print sMyValue
    '-> Hello World!
 
    Call ByRefSample(sMyValue)
    Debug.Print sMyValue
    '-> Result from ByRefSample
 
    Call ByValSample(sMyValue)
    Debug.Print sMyValue
    '-> Result from ByRefSample
End Sub
 
Sub ByRefSample(ByRef sMyValue As String)
    sMyValue = "Result from ByRefSample"
End Sub
 
Sub ByValSample(ByVal sMyValue As String)
    sMyValue = "Result from ByValSample"
End Sub

Grundsätzlich sollte man ByRef-Argumente vermeiden und Argumente explizit ByVal übergeben, sofern keine triftigen Gründe dagegen sprechen.