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

Forumthread: "escape" Funktion in VBA

"escape" Funktion in VBA
15.11.2005 10:30:26
Tinu
Liebe VBA-Spezialisten
In einer UserForm möchte ich einer bestimmten Schaltfläche die Funktion der "Escape"-Taste zuweisen. Kann mir jemand den entsprechenden Code verraten?
Für Euere Hilfe wäre ich sehr dankbar
Gruss
Tinu
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: "escape" Funktion in VBA
15.11.2005 10:45:25
u_
Hallo,
Application.SendKeys ("{ESC}")
Gruß
Geist ist geil!
AW: "escape" Funktion in VBA
15.11.2005 11:13:29
Tinu
Hallo u_
Danke für die schnelle Antwort. Leider hat aber der Code nicht die gleiche Wirkung, wie die esc Taste. Ich denke, ich muss genauer beschreiben, was ich machen will:
In einer UserForm habe ich ComboBoxen. Wenn hier manuell etwas reigeschrieben wird, erscheint beim nächsten Click die Fehlermeldung "invalid property value". Wenn diese quittiert wird, steht der ungültige Eintrag immer noch in der ComboBox und der Vorgang wiederholt sich. Es gibt nur zwei Methoden, aus dieser Situation rauszukommen; die ComboBox zu löschen, oder die esc. Taste zu drücken. Wenn die esc Taste gedrückt wird, wird auch der Eintrag in der ComboBox gelöscht. Die Möglichkeit, die esc Taste zu drücken, ist aber den meisten Usern nicht bekannt. Daher möchte ich eine Schaltfläche in das UserForm einbauen, welche genau die gleiche Wirkung hat wie die esc Taste. Das funktioniert jedoch mit "Application.SendKeys ("{ESC}")" nicht.
Gruss
Tinu
Anzeige
AW: "escape" Funktion in VBA
15.11.2005 11:44:51
Erich
Hallo Tinu,
die Fehlermeldung "invalid property value" lässt vermuten, dass der Fehler mit der ComboBox wenig zu tun hat. Du versuchst wohl irgendwo später, einer Eigenschaft einen ungültigen Wert zuzuweisen. Hier tritt der Fehler auf, und hier sollstest du ihn abfangen und per VBA den falschen Wert in der CB löschen.
Besser könnrest du schon mittels CB-Ereignis die Eingabe prüfen und ungültige Werte von vornherein ablehnen. Dann hast du die Kontrolle und lässt nicht Excel/VBA einen Fehlerhinweis produzieren.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: "escape" Funktion in VBA
15.11.2005 11:55:59
Matthias
Deine Idee mit der Schaltfläche funktioniert aus folgendem Grund nicht: Wenn die Schaltfläche angeklickt wird, versucht das System, ihr den Focus zu geben und fordert die Combobox auf, den Focus herzugeben. Diese gibt den Focus aber nicht her, weil die Feldprüfung gemäß Einstellung der Eigenschaft MatchRequired = TRUE auf einen Wert aus der Liste besteht.
Wenn man [ESC] betätigt, kann man das Feld trotzdem mit dem ungültigen Wert verlassen. Das ist aber nicht der Sinn der Feldprüfung.
Wenn andere Werte als die in der Liste zulässig sind, stelle die "MatchRequired"-Eigenschaft der Combobox auf FALSE. Dann werden alle Werte ohne Meldung akzeptiert. Willst du nicht in der Liste enthaltene Werte zwar akzeptieren, aber einen Hinweis ausgeben, wirst du um VBA-Code nicht herumkommen: Du müsstest dann die Feldprüfung im AfterUpdate-Event der Combobox selbst programmieren (Prüfung, ob Wert in der Liste, Warnhinweis, wenn nicht).
Eine billige "Lösung" wäre es, im ControlTipText den User auf die ESC-Taste hinzuweisen (find' ich aber sehr unelegant).
Gruß Matthias
Anzeige
AW: "escape" Funktion in VBA
15.11.2005 14:44:50
Tinu
Hallo Erich und Matthias
Besten Dank für Euere Antworten.
MatchRequired = TRUE ist ein Muss bei meiner Anwendung. Die UserForm enthält mehrere ComboBoxen, wobei die nächste jeweils in Abhängigkeit der vorhergehenden mit Werten zur Auswahl geladen wird. Was ich nun eigentlich erreichen möchte ist, dass keine "manuellen" Einträge in die ComboBoxen gemacht werden können Es sollen nur die Werte im Dropdown Menu angewählt werden können). Da ich dazu keine Lösung gefunden habe, wollte ich wenigstens einen Ausweg finden für diejenigen, welche in die ComboBoxen hineingeschrieben haben. Wenn man den Ausweg mit der esc Taste nicht kennt, dann bleibt man hängen.
Gibt es vielleicht eine Möglichkeit, die ComboBoxen für die manuelle Eingabe zu sperren, die Eingabe über das Dropdown-Fenster aber zuzulassen?
Gruss
Tinu
Anzeige
AW: "escape" Funktion in VBA
15.11.2005 15:47:31
Erich
Hallo Tino,
ja die Möglichkeit gibt es. Du kannst die Style-Eigenschaft einer ComboBox festlegen als
fmStyleDropDownCombo:
"Das Kombinationsfeld-Steuerelement verhält sich wie ein Dropdown-Kombinationsfeld. Der Benutzer kann einen Wert im Bearbeitungsbereich eingeben oder einen Wert aus der Dropdown-Liste auswählen (Voreinstellung(!!!))."
oder
fmStyleDropDownList
"Das Kombinationsfeld-Steuerelement verhält sich wie ein Listenfeld. Der Benutzer muss einen Wert aus der Liste auswählen."
(Zitate aus der VBA-Hilfe)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: "escape" Funktion in VBA
15.11.2005 16:55:10
Tinu
Hallo Erich
Super, genau das löst mein Problem :))
Nochmals vielen Dank
Grüsse aus der Schweiz
Tinu
;
Anzeige
Anzeige

Infobox / Tutorial

Escape-Funktion in VBA für UserForms


Schritt-für-Schritt-Anleitung

Um einer Schaltfläche in einer UserForm die Funktion der "Escape"-Taste zuzuweisen, kannst Du den folgenden VBA-Code nutzen:

Private Sub btnEscape_Click()
    Application.SendKeys "{ESC}"
End Sub
  1. Öffne den VBA-Editor in Excel (ALT + F11).
  2. Füge eine UserForm hinzu und platziere eine Schaltfläche darauf.
  3. Doppelklicke auf die Schaltfläche, um den Code-Editor für das Click-Ereignis zu öffnen.
  4. Füge den obigen Code in das Ereignis ein.
  5. Schließe den Editor und teste die UserForm.

Beachte, dass Application.SendKeys nicht immer so funktioniert, wie Du es dir wünscht, insbesondere bei kombinierten Eingaben. In solchen Fällen kann zusätzliche Logik erforderlich sein.


Häufige Fehler und Lösungen

Ein häufiger Fehler bei der Verwendung von Application.SendKeys ist, dass die Schaltfläche den Fokus erhält, bevor der SendKeys-Befehl ausgeführt wird. Dies kann dazu führen, dass die ESC-Taste nicht korrekt funktioniert. Um dies zu beheben:

  • Stelle sicher, dass die Schaltfläche nicht den Fokus erhält, wenn das Click-Ereignis ausgeführt wird.
  • Überlege, ob Du stattdessen die Eingabewerte in der ComboBox vor der Ausführung prüfen kannst.

Beispiel:

Private Sub btnEscape_Click()
    If Not IsNull(Me.ComboBox1.Value) Then
        Me.ComboBox1.Value = Null
    End If
    Application.SendKeys "{ESC}"
End Sub

Alternative Methoden

Statt Application.SendKeys gibt es effektivere Wege, um die Funktionalität der Escape-Taste zu implementieren:

  1. Ereignisbasierte Validierung: Nutze das AfterUpdate-Ereignis der ComboBox, um ungültige Werte abzufangen und die Eingabe zu validieren.

  2. ComboBox-Eigenschaften: Setze die MatchRequired-Eigenschaft der ComboBox auf TRUE, um sicherzustellen, dass nur gültige Werte eingegeben werden können. Um manuelle Eingaben zu verhindern, ändere die Style-Eigenschaft auf fmStyleDropDownList.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das die Escape-Taste in einer ComboBox-Umgebung verwendet:

Private Sub ComboBox1_AfterUpdate()
    If Not IsInList(Me.ComboBox1.Value) Then
        MsgBox "Ungültiger Wert. Bitte wähle einen Wert aus der Liste."
        Me.ComboBox1.Value = Null
    End If
End Sub

Function IsInList(Value As String) As Boolean
    Dim Item As Variant
    IsInList = False
    For Each Item In Me.ComboBox1.List
        If Item = Value Then
            IsInList = True
            Exit Function
        End If
    Next Item
End Function

In diesem Beispiel wird die Eingabe validiert, bevor die ESC-Funktion aufgerufen wird, um eine bessere Benutzererfahrung zu gewährleisten.


Tipps für Profis

  • Direkte Eingabe verhindern: Nutze die Style-Eigenschaft der ComboBox, um die direkte Eingabe zu verhindern.
  • Fehlerbehandlung: Implementiere eine umfassende Fehlerbehandlung, um unerwartete Fehler zu managen.
  • Dokumentation: Halte Deine VBA-Projekte gut dokumentiert, damit andere (oder Du selbst in der Zukunft) die Logik leicht nachvollziehen können.

FAQ: Häufige Fragen

1. Wie kann ich die ESC-Taste in Excel VBA einfacher nutzen?
Du kannst die SendKeys-Methode verwenden, aber sei vorsichtig, da sie manchmal unzuverlässig arbeitet. Eine Kombination aus Ereignisprozeduren und Validierung ist oft effektiver.

2. Was ist der Unterschied zwischen fmStyleDropDownCombo und fmStyleDropDownList?
fmStyleDropDownCombo erlaubt dem Benutzer, sowohl aus der Liste zu wählen als auch manuell einen Wert einzugeben. fmStyleDropDownList zwingt den Benutzer, einen Wert aus der Liste auszuwählen, was das Risiko ungültiger Eingaben minimiert.

3. Wie kann ich die Verwendung der Escape-Taste in meiner UserForm dokumentieren?
Eine einfache Möglichkeit ist, den Hinweis im ControlTipText der ComboBox oder Schaltfläche anzuzeigen, um die Benutzer darauf hinzuweisen, dass sie die ESC-Taste verwenden können, um ihre Eingaben zu löschen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige