Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1344to1348
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Sleep frage byval byref

Sleep frage byval byref
23.01.2014 20:36:42
Chris
Hallo liebes Forum,
ich habe seid langem mal eine frage.Es geht um diese Code Zeile:
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Kann mir kurz jemand erklären warum das ganze nicht so auch geht ?
Declare Sub Sleep Lib "kernel32" (dwMilliseconds As Long)
Ich weiß irgendwas mit byref aber kann mir das jemand kurz erklären warum das in dem Fall nicht geht ?
Vielen Dank!
gruß Chris

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
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

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige