Private
Sub
BTN_Click()
Dim
para1, para2
As
Integer
para1 = 1
para2 = 2
Call
MeineUntersub(para1, para2)
MsgBox
"Werte für para. weiterhin "
& para1 &
" , "
& para2
End
Sub
Rem ************************************************************************************
Rem Thema verfehlt, denn ....
Rem nur der Umstand, dass
"ByVal"
nicht angegeben wurde zählt als Fehler !
Rem
Rem Egal ob explizit
"ByRef"
oder ohne Angabe - WIRD IMMER NUR DIE SPEICHERADRESSE !
Rem an die Unterprozedur übermittelt - folglich ändert die Unterprozedur
"diese"
Variable
Rem daher ....
Rem Fehler beim Kompilieren - Argumenttyp
ByRef
unverträglich :
Rem diese Warnung bezieht sich auf
"para1"
-
Variant
kann nicht mehr verändert werden !
Rem
Rem dagegen expliziet
"ByVal"
wird eine neue Variable (hier zus. als
Integer
) erzeugt !
Rem ************************************************************************************
Sub
MeineUntersub(
ByVal
para1
As
Integer
,
ByVal
para2
As
Integer
)
MsgBox
"Werte für para. eingangs MeineSub "
& para1 &
" , "
& para2
para1 = 10
para2 = 20
MsgBox
"Werte für para. jetzt in der MeineSub "
& para1 &
" , "
& para2
End
Sub
Sub
Test()
para1 = 1
para2 = 2
Rem ***********************************************************************************
Rem und für das Handbuch des unnützen Wissens -
Rem die relevanten Fakten :
Rem nicht deklarierte Variable - somit
Variant
schlucken nicht nur Speicher -
Rem der Speicherinhalt muss eben auch mit unzählig unnötigen CPU- clock ticks
Rem umständlich verwaltet werden, d.s. ca. 200 % Mehraufwand je undeklarierter Variable
Rem was besonders erfreulich wenn das Makro das erste Mal startet und sich die RunTime
Rem einmalig alle nötigen API-Calls zusammenkratzt - ca. 800% im ersten Anlauf !
Rem (dagegen nimmt der Typ
Long
wegen der 32-bit Architektur nur 1 Schluck aus der ...)
Rem EGAL was soll´s (Die Väter des VBA haben sich schon etwas dabei gedacht)
Rem ***********************************************************************************
Call
UnterTest(para1, para2)
MsgBox
"Werte für para. weiterhin "
& para1 &
" , "
& para2
Call
FehlTest(para1, para2)
MsgBox
"Werte für para. sind jetzt "
& para1 &
" , "
& para2
End
Sub
Sub
UnterTest(para1, para2)
MsgBox
"Werte für para. eingangs in der TestSub "
& para1 &
" , "
& para2
para1 = 1.111111111111 * para2
para2 = 2.222222222222 * para1
Rem ***********************************************************************************
Rem macht sie aber !!! - aber wie !!!!!!!
Rem soviel zum Nährwert von Variablendeklaration LOL
Rem denn ....
Rem macht sie aber und zwar genau
Rem ***********************************************************************************
MsgBox
"Werte für para. in der TestSub "
& Format(para1,
"#0"
) &
" , "
& Format(para2,
"#0"
)
End
Sub
Sub
FehlTest(
ByVal
para1
As
Double
,
ByVal
para2
As
Double
)
Rem ***********************************************************************************
Rem ohne das
"ByVal"
fällt der auf die Schnauze !!!
Rem ***********************************************************************************
MsgBox
"Werte für para. eingangs in der FehlSub "
& para1 &
" , "
& para2
para1 =
CDbl
(1.111111111111 * para2)
para2 =
CDbl
(2.222222222222 * para1)
Rem ***********************************************************************************
Rem macht sie aber !!! - aber wie !!!!!!!
Rem soviel zum Nährwert von Variablendeklaration LOL
Rem denn ....
Rem macht sie auch nicht
Rem ***********************************************************************************
MsgBox
"Werte für para. in der FehlSub "
& para1 &
" , "
& para2
End
Sub