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

Rückgabewert eines Formulars

Forumthread: Rückgabewert eines Formulars

Rückgabewert eines Formulars
12.07.2004 13:10:05
Markus
Moin zusammen,
folgendes Problem.
Ich rufe aus einer Prozedur ein Formular auf. Danach möchte ich herausfinden, welchen Knopf (ok oder cancel) der User gedrückt hat.
Hierbei möchte ich aber auf das Setzen von irgendwelchen globalen Variablen verzichten. Gibt es eine Möglichkeit den Buttons im Form einen Rückgabewert oder ähnliches zuzuweisen?
Zum besseren Verständnis eine schematische Darstellung der Prozedur:

Sub blabla()
Formular1.show (vbModal)
if benutzeraktion = 'ok' then
else
end
End Sub

Vielen Dank im voraus
Gruß.
Markus
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Rückgabewert eines Formulars
andreas
hallo,
vielleicht versteh ich es auch falsch,
aber der button kann doch zB die eigenschaften vbyes, vbno, vbcancel haben - und auf die fragst ab
if vbyes then
...
gruß
andreas e


http://www.fachforen.de
eine Linksammlung zu diversen fachforen
Anzeige
AW: Rückgabewert eines Formulars
12.07.2004 13:21:19
Matthias
Hallo Markus,
grundsätzlich ist es besser, die erforderlichen Maßnahmen gleich um Codemodul der UF zu ergreifen (CommandButton_Click()), es gibt auch die Tag-Eigenschaft der Userforms, die kannst du abhängig vom grdrückten Button (OK oder Abbruch) auf beliebige Werte setzen und später abfragen.
Im Userform:
Private Sub CommandButton1_Click()
'Abbrechen
Me.Tag = "Abbruch"
Me.Hide
End Sub
Private Sub CommandButton2_Click()
'OK
Me.Tag = "OK"
Me.Hide
End Sub
Im Modul:
Sub test()
UserForm1.Show
MsgBox UserForm1.Tag
End Sub
(Nicht mit Unload Me das UF entladen, sonst ist die Tag-Eigenschaft auch leer.)
Gruß Matthias
Anzeige
AW: Rückgabewert eines Formulars
Markus
Hallo zusammen,
vielen Dank für eure Antworten. Die Lösung von Matthias mit dem Form verstecken gefällt mir sehr gut. Hab immer ein 'Unload Me' gemacht und somit den Wert des Tags verloren, da dieser nur zur Laufzeit verfügbar ist. Jetzt schliesse ich das Form eben nach Auslesen des Wertes.
Gruß,
Markus
Anzeige
AW: Rückgabewert eines Formulars
Ulf
Übergib doch eine Variable an eine Unterprozedur, für Abbruch/Schließen
kannst du den Closemode übergeben.
Wie/wo soll die Ausgabe erfolgen?
Ulf
;
Anzeige

Infobox / Tutorial

Rückgabewert eines Formulars in Excel VBA


Schritt-für-Schritt-Anleitung

Um den Rückgabewert eines Formulars in Excel VBA zu erhalten, ohne globale Variablen zu verwenden, kannst du die Tag-Eigenschaft des UserForms nutzen. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne Visual Basic for Applications (VBA) in Excel (Alt + F11).

  2. Füge ein UserForm hinzu und platziere zwei CommandButtons darauf (z.B. CommandButton1 für "Abbrechen" und CommandButton2 für "OK").

  3. Füge folgenden Code in das Codefenster des UserForms ein:

    Private Sub CommandButton1_Click()
       'Abbrechen
       Me.Tag = "Abbruch"
       Me.Hide
    End Sub
    
    Private Sub CommandButton2_Click()
       'OK
       Me.Tag = "OK"
       Me.Hide
    End Sub
  4. Erstelle eine Sub-Prozedur in einem Modul, um das UserForm aufzurufen und den Rückgabewert abzufragen:

    Sub test()
       UserForm1.Show
       MsgBox UserForm1.Tag
    End Sub
  5. Jetzt kannst du das Formular mit test() aufrufen, und es wird eine MessageBox mit dem Rückgabewert angezeigt.


Häufige Fehler und Lösungen

  • Fehler: Der Wert von Tag ist leer, wenn du Unload Me verwendest.

    • Lösung: Verwende Me.Hide, um das Formular zu schließen, anstatt es zu entladen. Dadurch bleibt der Wert in der Tag-Eigenschaft erhalten.
  • Fehler: Die Buttons reagieren nicht.

    • Lösung: Stelle sicher, dass die Event-Handler (CommandButton1_Click und CommandButton2_Click) korrekt zugeordnet sind und der Code im richtigen Kontext ausgeführt wird.

Alternative Methoden

Eine weitere Möglichkeit, den Rückgabewert eines Formulars zu erhalten, besteht darin, eine Variable an die Sub-Prozedur zu übergeben. Hier ein Beispiel:

Sub test(rueckgabewert As String)
    UserForm1.Show
    rueckgabewert = UserForm1.Tag
End Sub

Rufe die Sub-Prozedur mit einer Variablen auf:

Dim ergebnis As String
test(ergebnis)
MsgBox ergebnis

Praktische Beispiele

Hier ist ein praktisches Beispiel, wie du den Rückgabewert in einer Anwendung nutzen kannst:

Sub FormularSteuerung()
    Dim aktion As String
    UserForm1.Show
    aktion = UserForm1.Tag

    If aktion = "OK" Then
        MsgBox "Du hast OK gedrückt!"
    ElseIf aktion = "Abbruch" Then
        MsgBox "Aktion abgebrochen."
    End If
End Sub

Tipps für Profis

  • Nutze die Tag-Eigenschaft, um nicht nur einfache Werte, sondern auch komplexe Daten zu speichern, wie zum Beispiel JSON-Strings oder durch Kommas getrennte Werte.
  • Vermeide das Entladen des UserForms, solange du den Rückgabewert benötigst. Dies verbessert die Handhabung von Formulardaten erheblich.
  • Verwende benutzerdefinierte Dialoge, um die Benutzererfahrung zu verbessern, anstatt Standard-Meldungskästen zu verwenden.

FAQ: Häufige Fragen

1. Wie kann ich den Rückgabewert in einer anderen Prozedur verwenden?
Du kannst den Rückgabewert in einer Variablen speichern und diese an andere Sub-Prozeduren übergeben.

2. Was passiert, wenn ich Unload Me verwende?
Der Wert der Tag-Eigenschaft wird gelöscht, da das UserForm vollständig aus dem Speicher entfernt wird.

3. Kann ich mehrere Rückgabewerte erhalten?
Ja, du kannst mehrere Variablen verwenden oder ein benutzerdefiniertes Objekt erstellen, um mehrere Werte zu speichern.

4. Welche Excel-Version benötige ich?
Die beschriebenen Methoden sind in den meisten Excel-Versionen ab Excel 2007 verfügbar.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige