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

Forumthread: was wurde angeklickt

was wurde angeklickt
04.09.2008 12:04:37
Specke
Hallo Experten,
ich habe eine Userform mit 4 Textboxen und diversen anderen Steuerelementen.
Der Text in den Textboxen kann verändert werden. Im Moment wird beim Verlassen einer Textbox immer gefragt, ob der Wert gespeichert werden soll.
Ich möchte aber nur gefragt werden, wenn ich etwas anderes ausser den Textboxen anklicke.
Wie kann ich das letzte aktive und das neue aktive Element ansprechen?
Danke und Gruß Specke
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: was wurde angeklickt
04.09.2008 12:55:23
Ramses
Hallo
speichere das letzte angeklickte Control in einer globalen Variable.
Das aktive Control kannst du mit "ActiveControl" abfragen
Gruss Rainer
AW: Wer fragt?
04.09.2008 13:12:26
Erich
Hallo Vorname,
dass du "beim Verlassen einer Textbox immer gefragt" wirst, ist ja kein normales Verhalten,
sondern wird irgendwo so programmiert sein - vermutlich im Code deiner UserForm.
Dann muss man dort vielleicht etwas ändern/löschen. Eine Beispielmappe wäre sicher nützlich.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Wer fragt?
04.09.2008 14:58:00
Specke
Hallo Erich,
ja das habe ich so programmiert. (Exit-Ereignis der Textbox)
Dort kann ich aber nicht vorher abfragen, welches Steuerelement angeklickt wurde, oder?
Gruß Specke
AW: Wer fragt?
04.09.2008 15:49:00
Erich
Hallo Vorname,
wenn du im Exit-Ereignis einer Textbox programmiert hast, dass du gefragt werden sollst,
dann wirst du beim Verlassen dieser Textbox gefragt.
Wenn du die Rückfrage im Exit-Ereigniscode rausnimmst, wirst du nicht mehr gefragt.
Wozu müsstest du dabei wissen, was davor oder danach passiert?
Wir wissen nicht, was du programmiert hast. Vielleicht wäre es doch nützlich,
du würdest dein Problem anhand einer Beispielmappe verdeutlichen
und schreiben, welches Verhalten abgestellt werden sollte.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Wer fragt?
04.09.2008 21:29:44
Specke
Hallo Erich,
also versuche ich es nochmal zu erklären:
ich habe eine Userform mit 4 Textboxen und diversen anderen Steuerelementen (Comboboxen, Checkboxen, Rahmen, Optionbutton)
Der Text in den 4 Textboxen kann verändert werden und soll nach Rückfrage auch gespeichert werden. Da ich es noch nicht anders hinbekommen habe, wird nach jeder Textbox gefragt, ob gespeichert werden soll.
Ich möchte es aber so, dass ich nur gefragt werde,wenn ich etwas anderes als die Textboxen anklicke.
Wenn ich also z.B. den Text in Textbox1 ändere und dann in Textbox2 wechsel, soll noch nicht gefragt und gespeichert werden.
Wenn ich nach der Textbox2 den Optionbutton1 anklicke, soll aber gefragt werden und die Werte, die in Textbox1 bis 4 stehen sollen gespeichert werden.
Ist es jetzt klarer?
Gruß Specke
Anzeige
AW: Wer fragt?
04.09.2008 22:04:00
Erich
Hi Vorname,
das Problem ist mir schon klar.

Der Text in den 4 Textboxen kann verändert werden
und soll nach Rückfrage auch gespeichert werden.

Jetzt geht es also darum, wann die Rückfrage erfolgen soll.


Da ich es noch nicht anders hinbekommen habe,
wird nach jeder Textbox gefragt, ob gespeichert werden soll.

Jetzt willst du es anders hinbekommen. Also: Lösche den Teil deines Codes bei dern Textboxen,
denn bei den Textboxen soll ja NICHT mehr rückgefragt werden.
Stattdessen baust du die Rückfrage überall da ein, wo jetzt rückgefragt werden soll,
also z. B. an den Anfang der OptionButton1_Click()-Prozedur oder CommandButton1_Click(),
eventuell auch in eine ComboBox1_Enter(). Wo es eben so passieren soll.
Wenn das mehrere Stellen sind, würde ich die Rückfrage in eine eigene Prozedur auslagern
und an den entsprechenden Stellen nur aufrufen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Wer fragt?
04.09.2008 22:17:56
Erich
Hallo Vorname,
vielleicht noch eine Bemerkung dazu, was die Textboxen eventuell noch zur Lösung beitragen könnten.
Du könntest (z. B. beim Textbox-Exit) in einer modulweit bekannten Variablen ablegen,
dass diese Textbox "besucht" wurde.
Vielleicht ist wichtiger, ob der Inhalt geändert wurde, das ginge auch hier, mit ein klein wenig mehr Aufwand.
Dann kannst du vor der Rückfrage testen, ob überhaupt Textboxen betreten (oder geändert) wurden.
Wenn dem nicht so ist, muss ja wohl nicht gefragt werden.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Wer fragt?
09.09.2008 09:44:00
Specke
Hallo Erich,
so habe ich es mir auch schon überlegt, aber die Idee verworfen, weil ich so viele andere Steuerelemente auf der Userform habe. Das wird ein Haufen Schreibarbeit. Ich glaub, dann lass ich es lieber wie es ist. :-(
Danke für Deine Unterstützung
Specke
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Userform in Excel: Rückfragen bei Textboxen optimieren


Schritt-für-Schritt-Anleitung

  1. Global Variable erstellen: Lege eine globale Variable an, um das zuletzt aktive Steuerelement zu speichern. Füge diesen Code in das Modul deiner Userform ein:

    Dim lastControl As Control
  2. ActiveControl abfragen: Nutze das ActiveControl-Objekt, um das aktuelle Steuerelement zu identifizieren. Setze dies im Exit-Ereignis der Textboxen ein:

    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
       Set lastControl = ActiveControl
    End Sub
  3. Rückfrage implementieren: Überprüfe im Exit-Ereignis, ob das neue Steuerelement von den Textboxen abweicht. Wenn ja, stelle die Rückfrage:

    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
       If TypeName(ActiveControl) <> "TextBox" Then
           If MsgBox("Möchten Sie die Änderungen speichern?", vbYesNo) = vbYes Then
               ' Speichere die Werte
           End If
       End If
       Set lastControl = ActiveControl
    End Sub
  4. Wende diese Logik auf alle Textboxen an: Kopiere den Code für alle Textboxen in deiner Userform.


Häufige Fehler und Lösungen

  • Frage wird immer gestellt: Wenn die Rückfrage auch nach dem Wechsel zwischen Textboxen erscheint, stelle sicher, dass die TypeName(ActiveControl)-Abfrage korrekt implementiert ist.

  • Fehlende Rückfragen bei anderen Steuerelementen: Überprüfe, ob die Rückfrage in den Click-Ereignissen der anderen Steuerelemente implementiert ist.


Alternative Methoden

Eine alternative Methode zur Vermeidung von Rückfragen ist die Nutzung von Flags, um festzustellen, ob eine Änderung an den Textboxen vorgenommen wurde. Zum Beispiel:

Dim changesMade As Boolean

Private Sub TextBox1_Change()
    changesMade = True
End Sub

Private Sub OptionButton1_Click()
    If changesMade Then
        If MsgBox("Möchten Sie die Änderungen speichern?", vbYesNo) = vbYes Then
            ' Speichere die Werte
        End If
        changesMade = False
    End If
End Sub

Praktische Beispiele

Wenn Du eine Userform mit mehreren Steuerelementen hast, kannst Du die Rückfrage anpassen, um nur bei spezifischen Aktionen zu fragen. Zum Beispiel:

Private Sub OptionButton1_Click()
    If Not TypeName(lastControl) = "TextBox" Then
        If MsgBox("Möchten Sie die Änderungen speichern?", vbYesNo) = vbYes Then
            ' Speichere die Werte
        End If
    End If
End Sub

Dieser Code fragt nur, wenn das letzte aktive Steuerelement kein Textfeld war.


Tipps für Profis

  • Code modularisieren: Lagere die Rückfrage in eine eigene Prozedur aus, um den Code sauberer und wartungsfreundlicher zu gestalten.

  • Fehlerbehandlung einfügen: Füge eine Fehlerbehandlung in deinem Code hinzu, um unerwartete Fehler abzufangen.

  • Verwendung von Collections: Wenn Du viele Steuerelemente hast, kann es hilfreich sein, diese in einer Collection zu speichern, um die Rückfragen zentral zu steuern.


FAQ: Häufige Fragen

1. Wie kann ich die Rückfrage nur bei bestimmten Steuerelementen stellen? Du kannst die Rückfrage in den Click- oder Exit-Ereignissen der gewünschten Steuerelemente implementieren und anpassen.

2. Was ist, wenn ich die Userform schließe? Stelle sicher, dass Du auch beim Schließen der Userform eine Rückfrage einfügst, um alle Änderungen zu speichern.

3. Wie kann ich den Status der Textboxen speichern? Du kannst den Inhalt der Textboxen in Variablen speichern, bevor Du die Rückfrage stellst, und diese Werte dann verwenden, um die Änderungen zu speichern.

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