Auch wenn sie nicht am Anfang des Codes steht, scheint Private Sub UserForm_Initialize() als erstes ausgeführt werden.
Richtig. Dieses Ereignis findet statt noch bevor die UserForm angezeigt wird.
[In der Sub UserForm_Initialize()] habe ich mehrere Variablen definiert, die ich auch an anderer Stelle der Userform benötige. Obwohl ich die Variablen als Public definiert habe, sind die Variablen an andere Stelle nicht verfügbar.
'UserForm1
Option Explicit
Private Sub UserForm_Initialize()
'Variablen auf Prozedurebene
' - nur innerhalb von UserForm_Initialize() bekannt
Dim var1 As Long
Dim var2 As String
Dim var3 As Variant
'...
End Sub
Zum Vergleich:
'UserForm1
Option Explicit
'Variablen auf Modulebene - auch Membervariablen genannt
' - sind in der gesamten UserForm bekannt
' - Private bedeutet, man kann auf diese Membervariablen, von Außerhalb der UserForm, nicht zugreifen
Private var1 As Long
Private var2 As String
Private var3 As Variant
Private Sub ComboBox1_Change()
If ComboBox1.ListIndex = -1 Then
Exit Sub
End If
If ComboBox1.Value = var1 Then
Call MsgBox("Der Wert ist " & var1)
Else
Call MsgBox("Der Wert ist NICHT " & var1 & " (sondern " & ComboBox1.Value & ")")
End If
End Sub
Private Sub UserForm_Initialize()
'Werte zuweisen
var1 = 10
var2 = ""
var3 = Array("Hello", 1, var1, "3")
ComboBox1.List = var3
End Sub
Allgemein sollte man sich immer überlegen wann man Membervariablen wirklich braucht, oder ob es auch einfach reicht eine Informationen als Argument an eine Funktionen durchzureichen.
Grüße
|