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.