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

Userform Exit vs. Abbruch-Button

Forumthread: Userform Exit vs. Abbruch-Button

Userform Exit vs. Abbruch-Button
19.01.2015 13:00:00
Joni

Hallo,
ich bin auf der Suche nach einer Lösung für folgendes Problem. In meiner Userform sind bei verschiedenen Controls Exit-Ereignisse hinterlegt. Zusätzlich gibt es einen CommandButton für Abbrechen. Jetzt hätte ich gerne, dass, wenn der Abbrechen-Button gewählt wird, ggfl. das Exit-Ereignis des aktuellen Controlls, in dem der User gerade steht, nicht mehr ausgeführt wird (liefert einen Fehlerhinweis). Wenn mit dem X abgebrochen wird, dann klappt das, wie kriege ich das mit dem Button auch hin?
Danke für eure Hilfe.
Gruß Joni


Sub CommandButtonCancel_Click()
Unload Me
Sheets(1).Activate
End
End Sub

Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform Exit vs. Abbruch-Button
19.01.2015 13:05:29
Hajo_Zi
Hallo Joni,
Option Explicit
Private Sub ListBox1_Click()
If Cmd_Abbrechen.Tag = "" Then
' Dein Code
End If
End Sub
Private Sub Cmd_Abbrechen_Click()
Cmd_Abbrechen.Tag = 1
' dein Code
End Sub

AW: Userform Exit vs. Abbruch-Button
19.01.2015 13:06:36
Hajo_Zi
Hallo Joni,
der erste Code sollte Exit sein.

Anzeige
AW: Userform Exit vs. Abbruch-Button
19.01.2015 15:34:42
Ralf P.
Hallo Hajo,
bist du bitte so nett und verlierst ein paar Worte dazu, was die .Tag Eigenschaft mit Abbrechen/Exit zu tun hat?
Danke!
Gruß
Ralf

AW: Userform Exit vs. Abbruch-Button
19.01.2015 15:41:11
Hajo_Zi
die Tag Eigenschaft wurde für den Programmierer angeschafft.
Gruß Hajo

Anzeige
stehe auf dem Schlauch
19.01.2015 17:19:10
Ralf P.
Hallo Hajo,
ich kann dir nicht folgen.
Man kann im .Tag was reinschrieben lassen und anderswo auswerten.
Aber wie kann man das _Exit Ereignis damit unterdrücken?
Mir fiele nur ein, dass mittels .Tag nicht ausführen/ deren Ausführung abbrechen zu lassen.
Gruß
Ralf

AW: stehe auf dem Schlauch
19.01.2015 17:37:28
Hajo_Zi
ich hatte ja die Prüfung .Tag=""
das bei Exit hin sollte.
Gruß Hajo

Anzeige
AW: Userform Exit vs. Abbruch-Button
19.01.2015 18:01:41
Joni
Hallo Hajo,
das klappt leider nicht. Exit zieht immer vor dem Click da ja die Textbox verlassen wird bevor geklickt wird. Ich müsste irgendwie feststellen warum die Textbox verlassen wird um dann darauf reagieren zu können.
Hast du vielleich noch eine Idee?
Danke und Gruß Joni

AW: Userform Exit vs. Abbruch-Button
19.01.2015 18:04:26
Hajo_Zi
es ging im ersten Beitrag darum das Cmd_Abbruch geklickt wird, jetzt schreibst Du was von Textboox verlassen.
Ich erstelle die Lösung für das was im Beitrag dargestellt wurde. Wird diese Darstellung geändert, überlasse ich anderen die Lösung, da ich schon eine Lösung erstellt hatte und dafür Zeit investiert habe. Ich arbeite nicht für den Papierkorb.
Gruß Hajo

Anzeige
AW: Userform Exit vs. Abbruch-Button
19.01.2015 18:13:42
Joni
Hallo Hajo,
es hat sich nichts geändert. Cursor steht in einer Textbox mit einem Wert (in dem Fall [kein Wert]) müsste aber auf Grund von anderen Eingaben einen Wert haben. Wenn die Textbox verlassen wird prüfe ich diese Eingaben und melden den Fehler. Wenn jetzt aber direkt mit dem Cursor in der leeren Textbox auf den Button Abbrechen geklickt wird, dann wird trotzdem vor dem _Click des Buttons noch _Exit der Textbox ausgeführt. D. h. ich kann auch mit dem _Click des Buttons nichts in .Tag schreiben, da die _Exit-Prüfung auf den Inhalt der Textbox ja noch vorher ausgeführt wird. Anders herum wäre das kein Problem.
Ich hoffe ich konnte mich klar ausdrücken.
Gruß Joni

Anzeige
AW: Userform Exit vs. Abbruch-Button
20.01.2015 09:16:54
Nepumuk
Hallo,
ich hab dir doch geschrieben, dass das Abbrechen per Button und das Canceln des Exit-Events sich nicht vertragen. Warum glaubst du mir das nicht?
Gruß
Nepumuk

OK ist die Lösung, somit alles OK :-)
20.01.2015 19:34:42
Joni
Hi Nepomuk,
da war einiges hin und her. Ich prüfe jetzt den Wert erst beim OK-Button, ist zwar nicht so schön, da der User nicht direkt beim Fehler informiert wird, aber es funktioniert.
Allen Danke für die rege Diskussion!
Gruß Joni

Anzeige
AW: Userform Exit vs. Abbruch-Button
19.01.2015 13:07:04
Daniel
Hi
wenn du den Code, der beim Schließen laufen soll, im QueryClose-Event ausführen lässt, kannst du über die Systemvariable CloseMode ermitteln, ob die Userform über das Schließkreuz oder ein Unload Me im Code (Button) veranlasst wurde und entsprechend reagieren.
Gruß Daniel

AW: Userform Exit vs. Abbruch-Button
19.01.2015 15:27:29
Nepumuk
Hallo Joni,
wenn du z.B. bei einer TextBox das Exit-Event per Cancel = True beendest weil kein gültiger Eintrag gemacht erfolgte, dann hast du keine Chance einen Button anzuklicken. Ich mache grundsätzlich keine just in time Prüfung, sondern prüfe nur beim Klick auf OK oder Übernehmen. Das macht das Ganze viel einfacher und übersichtlicher.
Gruß
Nepumk

Anzeige
AW: Userform Exit vs. Abbruch-Button
19.01.2015 15:42:26
Ralf P.
Hallo Nepumuk,
Die Elemente auf meinen Forms hängen alle voneinander ab.
Bspw werden Frames erst aktiviert, wenn gewisse Optionbuttons bedient oder textboxen gefüllt sind.
Ohne Value oder Exit ist das kaum möglich?!
Gruß
Ralf

AW: Userform Exit vs. Abbruch-Button
19.01.2015 15:37:45
Ralf P.
Hallo Joni,
meine Userforms sind so gemacht, dass beim Exit kein Fehler auftreten kann.
Das ist manchmal nicht einfach, aber möglich.
Gruß
Ralf

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Userform Exit und Abbrechen-Button in Excel VBA


Schritt-für-Schritt-Anleitung

Um den Abbrechen-Button in einer Userform zu implementieren und gleichzeitig das Exit-Ereignis der Controls zu berücksichtigen, gehe wie folgt vor:

  1. Userform erstellen: Öffne Excel, gehe in das VBA-Editor (Alt + F11) und erstelle eine neue Userform.
  2. Controls hinzufügen: Füge die gewünschten Controls hinzu, z. B. TextBoxen, ListBoxen und einen CommandButton für den Abbrechen-Button.
  3. Code für den Abbrechen-Button:
    Private Sub Cmd_Abbrechen_Click()
       ' Setze Tag, um Exit-Ereignis zu beeinflussen
       Cmd_Abbrechen.Tag = 1
       Unload Me
    End Sub
  4. Exit-Ereignis in der TextBox anpassen:
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
       If Cmd_Abbrechen.Tag = 1 Then
           Cancel = True ' Verhindert das Verlassen der TextBox
           Cmd_Abbrechen.Tag = "" ' Tag zurücksetzen
       Else
           ' Hier kann die Validierung des Textbox-Inhalts erfolgen
       End If
    End Sub

Häufige Fehler und Lösungen

  • Fehler beim Klicken auf den Abbrechen-Button: Oft wird das Exit-Ereignis der TextBox vor dem Click-Ereignis des Abbrechen-Buttons ausgeführt. Um dies zu umgehen, kannst du das .Tag-Property verwenden, um die Logik zu steuern.
  • Exit-Ereignis blockiert das Klicken: Wenn das Exit-Ereignis Cancel = True setzt, wird das Klicken auf den Button verhindert. Stelle sicher, dass du die Bedingungen im Exit-Ereignis richtig überprüfst.

Alternative Methoden

Eine weitere Methode zur Handhabung des Schließens einer Userform ist die Verwendung des QueryClose-Events. Hier kannst du überprüfen, wie die Userform geschlossen wird:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
        ' Userform wurde durch das Schließkreuz geschlossen
    ElseIf CloseMode = vbFormCode Then
        ' Userform wurde durch .Unload geschlossen
    End If
End Sub

Praktische Beispiele

Ein einfaches Beispiel zur Anwendung des Abbrechen-Buttons und der Exit-Logik:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Trim(TextBox1.Text) = "" Then
        MsgBox "Bitte einen Wert eingeben."
        Cancel = True
    End If
End Sub

In diesem Beispiel wird die TextBox validiert, und ein Fehlerhinweis wird angezeigt, wenn die TextBox leer ist.


Tipps für Profis

  • Nutze die .Tag-Eigenschaft, um verschiedene Zustände in deiner Userform zu steuern. Dies kann helfen, das Verhalten von Buttons und Exit-Ereignissen zu synchronisieren.
  • Vermeide "just in time"-Prüfungen in der Userform, um die Benutzererfahrung zu verbessern. Prüfe stattdessen beim Klicken auf den OK- oder Übernehmen-Button.

FAQ: Häufige Fragen

1. Wie kann ich das Exit-Ereignis einer TextBox blockieren?
Du kannst das Exit-Ereignis blockieren, indem du Cancel = True im Exit-Ereignis setzt, wenn bestimmte Bedingungen nicht erfüllt sind.

2. Was ist der Unterschied zwischen dem Abbrechen-Button und dem Schließen der Userform über das X?
Der Abbrechen-Button kann spezifische Logik ausführen, bevor die Userform geschlossen wird, während das Schließen über das X meist sofort erfolgt, ohne vorherige Bedingungen zu prüfen.

3. Wie kann ich Fehler beim Übergang zu anderen Controls vermeiden?
Verwende die .Tag-Eigenschaft, um den Status beim Verlassen eines Controls zu speichern und bedingte Logik zu implementieren, um Fehler zu vermeiden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige