HERBERS Excel-Forum - das Archiv
Variablen von UserForm an Modul übergeben
UserForm

Hallo,
wie lässt sich die Übergabe von Variablen von einem UserForm an ein Modul darstellen?
Ich habe ein UserForm mit 7 Felder, in denen Zahlen eingegeben werden. Mit dem Klickt auf den Button sollen die 7 Zahlen weiterverwendet werden in einem Modul. Mein aktueller Code für den Button sieht wie folgt aus:
Public Sub CommandButton1_Click()
liqsum = liq1.Value * 1 + liq2.Value * 1 + liq3.Value * 1 + liq4.Value * 1
altsum = alt1.Value * 1 + alt2.Value * 1 + alt3.Value * 1
Unload Me
End Sub

Sehr stark gekürzt sieht das Modul so aus:
Option Explicit
Dim tabellenblattauf, tabellenblatt, tabellenblattout, ... As String
Dim liq1, liq2, liq3, liq4, liqsum, alt1, alt2, alt3, altsum, ... As Integer
Sub aufbereiten()
tabellenblatt = "Input"
tabellenblattout = "Output"
tabellenblattauf = "Aufbereitet"
...
Load UserForm1
UserForm1.Show
...
liq = liq + liqsum
alt= alt + altsum
...
End Sub
Das Modul läuft richtig durch und zieht sich auch alle Daten nur nicht die Datem aus dem UserForm. Hat jemand eine Idee, wie ich da die Variablen richtig übergeben muss?
Vielen Dank und viele Grüße
Moe

mit Public deklarieren
Matthias

Hallo
Deklariere gleich die Variablen als Public in einem Modul
 Option Explicit
Public liq1 As Integer
Public liq2 As Integer
Public liq3 As Integer
Public liq4 As Integer
Public liqsum As Integer

usw ...
Dann stehen diie Variablen allen Prozeduren zur Verfügung
Gruß Matthias
Bei leerem Feld automatisch 0 setzen
Moritz

Hey Matthias,
so einfach kann es sein =). Vielen Dank es funktioniert gut.
Hast Du oder jemand anders vielleicht noch ein Idee, wie ich den UserForm Code erweitern muss, wenn in den einzelnen Feldern nichts eingetragen wird, dass dann dort automatisch eine 0 der Variable zugeordnet wird oder bereits 0 in dem Textfeld steht.
Viele Grüße
Moe
AW: Bei leerem Feld automatisch 0 setzen
fcs

Hallo Moe,
du kannst im Userform 0 als Wert der Value-Eigenschaft der Textfelder vorgeben.
Ich führe bei nummerischen Werten in UF grundsätzlich eine Wertkonversion von Text nach Zahl durch.
If IsNumeric(TextboxXYZ.Value) then
dblVariable = CDbl(TextboxXYZ.Value)
' oder
Cells(Zeile,Spalte).Value = CDbl(TextboxXYZ.Value)
ElseIf TextboxXYZ.Value="" Then
dblVariable = 0
'oder
Cells(Zeile, Spalte).ClearContents
Else
MsgBox "Eingabe für XYZ muss nummerisch sein"
Exit Sub
End If
Gleiches gilt für Datumseingaben, die mit IsDate geprüft und CDate von Text in Datum konvertiert werden können.
Gruß
Franz
AW: Variablen von UserForm an Modul übergeben
UserForm

Hallo Moe,
Im allgemeinen Modul muss du die Variablen, die vom Userform mit Daten gefüllt werden sollen als Public deklarieren.
Alternativ kannst du das Userform auch mit Me.Hide zunächst nur ausblenden und erst anch Auswertung der UF-Inhalte aus dem Speicher entfernen.

'Userform Button-Prozedur
Public Sub CommandButton1_Click()
Me.Hide
End Sub
'in der allgemeine Prozedur:
Load UserForm1
UserForm1.Show
With Userform1
liqsum = .liq1.Value * 1 + .liq2.Value * 1 + .liq3.Value * 1 + .liq4.Value * 1
altsum = .alt1.Value * 1 + .alt2.Value * 1 + .alt3.Value * 1
Unload Userform1
End With
Gruß
Franz