AW: Sleep frage byval byref
24.01.2014 08:18:48
fcs
Hallo Chris,
bei Parametern/Variablen, die als ByVal an eine andere Routine übergeben werden, wird nur der Wert der Variablen an die Routine übergeben.
Wird eine Variable ohne dies Option ByVal bzw. als ByRef (dem Standardwert) übergeben, dann kann die aufgerufene Prozedur den Wert der Variablen ändern und der geänderte Wert kann in der aufrufenden Prozedur weiter verarbetet werden.
Unten ein Beispiel, wie das Ergebnis dann unterschiedlich ist.
Es kann sein, dass eine Prozedur keine Werte als ByRef verarbeiten kann oder dass eine Variable nur via ByVal an eine andere Prozedur übergeben werden kann. Dann muss ein Parameter explizit als ByVal deklariert werden, um Fehler zu vermeiden.
Insbesondere wenn Werte an Funktionen außerhalb von VBA übergeben werden, wie dies im Fall von Sleep der Fall ist, funktioniert meist nur die Übergabe als Werte ohne Referenz zur aufrufenden Funktion.
Gruß
Franz
Sub aaTest()
Dim varPrint, varErgebnis
varPrint = 3
varErgebnis = fncMitByVal(varTest:=varPrint)
MsgBox "varPrint = " & varPrint & vbLf _
& "varErgebnis = " & varErgebnis, , "Test mit ByVal"
varPrint = 3
varErgebnis = fncMitByRef(varTest:=varPrint)
MsgBox "varPrint = " & varPrint & vbLf _
& "varErgebnis = " & varErgebnis, , "Test mit ByRef"
End Sub
Function fncMitByVal(ByVal varTest) As Variant
'Beispiel mit ByVal
fncMitByVal = varTest
varTest = varTest + 5
End Function
Function fncMitByRef(varTest)
'Beispiel mit ByRef
fncMitByRef = varTest
varTest = varTest + 5
End Function