Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Variablen von UserForm an Modul übergeben

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
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
mit Public deklarieren
07.12.2009 11:43:54
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
Anzeige
Bei leerem Feld automatisch 0 setzen
07.12.2009 12:07:33
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
Anzeige
AW: Bei leerem Feld automatisch 0 setzen
07.12.2009 13:10:22
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
Anzeige
AW: Variablen von UserForm an Modul übergeben
07.12.2009 11:57:15
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
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Variablen von UserForm an Modul übergeben


Schritt-für-Schritt-Anleitung

  1. UserForm erstellen: Beginne mit dem Erstellen eines UserForms in Excel VBA. Füge mindestens 7 TextBoxen (liq1 bis liq4, alt1 bis alt3) und einen Button hinzu.

  2. Variablen deklarieren: Deklariere die Variablen im allgemeinen Modul als Public, damit sie für andere Prozeduren zugänglich sind. Beispiel:

    Option Explicit
    Public liq1 As Integer
    Public liq2 As Integer
    Public liq3 As Integer
    Public liq4 As Integer
    Public liqsum As Integer
  3. Button-Prozedur erstellen: Implementiere die Logik in der CommandButton1_Click-Prozedur, um die Werte zu summieren und das UserForm zu schließen:

    Public Sub CommandButton1_Click()
       liqsum = liq1.Value * 1 + liq2.Value * 1 + liq3.Value * 1 + liq4.Value * 1
       Unload Me
    End Sub
  4. Werte im Modul verwenden: Verwende die Werte im Modul, indem Du sie nach dem Laden des UserForms aufrufst:

    Sub aufbereiten()
       Load UserForm1
       UserForm1.Show
       ' Hier kannst Du die Variablen verwenden
       Debug.Print liqsum
    End Sub
  5. Werte überprüfen: Achte darauf, dass Du die Eingaben in den TextBoxen überprüfst, um sicherzustellen, dass sie gültige Zahlen sind.


Häufige Fehler und Lösungen

  • Fehler: Die Variablen werden nicht richtig übergeben.

    • Lösung: Stelle sicher, dass die Variablen im Modul als Public deklariert sind. Überprüfe zudem, dass Du die Werte im UserForm mit der Syntax Me.TextBoxName.Value abfragst.
  • Fehler: UserForm schließt sich nicht oder die Werte werden nicht aktualisiert.

    • Lösung: Stelle sicher, dass Du die Unload Me-Anweisung nach der Werteübergabe verwendest, damit die UserForm geschlossen wird.

Alternative Methoden

  • Verwendung von Me.Hide: Anstatt das UserForm sofort zu entladen, kannst Du es mit Me.Hide ausblenden, um die Werte später zu verarbeiten. Beispiel:

    Public Sub CommandButton1_Click()
      Me.Hide
    End Sub
  • Direkte Zuweisung: Du kannst die Werte auch direkt in die Variablen im Modul zuweisen, wenn das UserForm aktiv ist:

    With UserForm1
      liqsum = .liq1.Value + .liq2.Value + .liq3.Value + .liq4.Value
    End With

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du die Werte von einem UserForm an ein Modul übergeben kannst:

  1. UserForm Setup:

    • Füge 4 TextBoxen für liq1, liq2, liq3, liq4 hinzu.
    • Füge einen Button namens CommandButton1 hinzu.
  2. Code im UserForm:

    Public Sub CommandButton1_Click()
       liqsum = Val(liq1.Value) + Val(liq2.Value) + Val(liq3.Value) + Val(liq4.Value)
       Unload Me
    End Sub
  3. Code im Modul:

    Sub aufbereiten()
       Load UserForm1
       UserForm1.Show
       Debug.Print liqsum
    End Sub

Tipps für Profis

  • Verwende IsNumeric: Überprüfe die Eingaben in den TextBoxen auf numerische Werte, um Fehler zu vermeiden.

    If Not IsNumeric(liq1.Value) Then
      MsgBox "Bitte eine gültige Zahl eingeben."
      Exit Sub
    End If
  • Initialisierung der TextBoxen: Setze die Standardwerte der TextBoxen auf 0, damit der Benutzer weiß, dass eine Eingabe notwendig ist.

  • Debugging: Nutze Debug.Print, um die Werte in der Konsole zu überprüfen, bevor Du sie weiterverwendest.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass meine Variablen immer einen Wert haben? Setze in den TextBoxen einen Standardwert von 0 oder überprüfe vor der Berechnung, ob die Werte gültig sind.

2. Was ist der Unterschied zwischen Unload Me und Me.Hide? Unload Me entfernt das UserForm aus dem Speicher, während Me.Hide es nur ausblendet, sodass Du es später wieder anzeigen kannst, ohne es neu zu laden.

3. Wie kann ich die Werte von mehreren UserForms an ein Modul übergeben? Du kannst ähnliche Public-Variablen für jedes UserForm deklarieren und die Werte entsprechend in den jeweiligen CommandButton_Click-Prozeduren zuweisen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige