Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Active Control abfragen

Active Control abfragen
05.10.2004 13:21:26
Michael
Halllo zusammen,
ich möchte in einem Frame jedes Label abfragen, ob es den Focus hat, und wenn ja die Schriftfarbe verändern.
Dim lbl As MSForms.Label
For Each lbl In Frame3.Controls
If lbl = ActiveControl Then

lbl.ForeColor = RGB(255, 255, 255)
MsgBox "" & ActiveControl.Name & ""
End If
Next
Die Syntax bei lbl = ActiveControl stimmt aber nicht.
Kann mir bitte jemand sagen, wie es richtig heißt?
Vielen Dank im voraus
Michael
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Active Control abfragen
Ulf
Ein Label kann keinen Focus haben und somit auch nicht das aktive Control sein.
Ulf
AW: Active Control abfragen
Michael
Hallo Ulf,
alles klar, dann geht es natürlich nicht.
Aber wie müßte es denn bei einer Textbox heißen? Dann nehme ich eben Textboxen.
Vielen Dank für Deine Antwort
Michael
AW: Active Control abfragen
Ulf
Wenn immer nur das ActiveControl anders gefärbt werden soll, musst du ja erstmal
alle wieder zurücksetzen, ist das so richtig?
Ulf
Anzeige
AW: Active Control abfragen
Michael
Ja. Beim Doppelklick auf die Textbox erscheinen Listboxen (visible = true), wenn die dann wieder ausgeblendet werden, setze ich die Schriftfarben der anderen textboxen wieder zurück.
Ich muß eben nur abfragen können, welche Textbox den Focus hat, d.h. ausgewählt wurde um dann die richtige Listbox einzublenden.
Gruß
Michael
Anzeige
AW: Active Control abfragen
Ulf
Nun versteh ich gar nichts mehr. Eine Textbox hat ja ein Doppelklick- Ereignis.
Darin kannst du die Listbox doch einfach hart verdrahten.
Ulf
AW: Active Control abfragen
Michael
Hallo Ulf,
jetzt hab ich es gefunden:
'wenn Textbox ausgewählt, Farbänderung
For Each lbl In Frame3.Controls
If lbl = Frame3.ActiveControl Then
lbl.BackColor = RGB(193, 14, 4)
end if
Next
Dann geht es.
Vielen Dank für Deine Bemühungen
Michael
End If
Next
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Active Control in VBA abfragen und anpassen


Schritt-für-Schritt-Anleitung

Um in VBA das aktive Control abzufragen und die Schriftfarbe einer Textbox zu ändern, kannst du die folgende Schritt-für-Schritt-Anleitung nutzen:

  1. Öffne den VBA-Editor in Excel (ALT + F11).

  2. Füge ein UserForm hinzu und platziere ein Frame sowie mehrere Textboxen darin.

  3. Kopiere den folgenden Code in das Code-Fenster des UserForms:

    Private Sub TextBox1_DblClick()
       Dim ctrl As Control
       For Each ctrl In Frame3.Controls
           If ctrl Is Frame3.ActiveControl Then
               ctrl.BackColor = RGB(193, 14, 4) ' Ändert die Hintergrundfarbe der aktiven Textbox
           Else
               ctrl.BackColor = RGB(255, 255, 255) ' Setzt die Hintergrundfarbe der anderen Textboxen zurück
           End If
       Next ctrl
    End Sub
  4. Testen der Funktionalität: Klicke doppelt auf eine der Textboxen, um ihre Hintergrundfarbe zu ändern.


Häufige Fehler und Lösungen

  • Fehler: „Die Syntax bei lbl = ActiveControl stimmt nicht.“

    • Lösung: Stelle sicher, dass du If ctrl Is Frame3.ActiveControl Then verwendest, um das aktive Control korrekt abzufragen.
  • Fehler: „Ein Label kann keinen Focus haben.“

    • Lösung: Verwende Textboxen oder andere Controls, die den Fokus erhalten können. Labels sind nicht dafür geeignet.

Alternative Methoden

Wenn du die Farbe oder Eigenschaften mehrerer Controls ändern möchtest, kannst du auch die Methode Me.ActiveControl verwenden, um auf das aktive Control innerhalb des Forms zuzugreifen. Hier ein Beispiel:

Private Sub TextBox1_Click()
    If Me.ActiveControl Is TextBox1 Then
        TextBox1.BackColor = RGB(0, 255, 0) ' Ändert die Farbe der angeklickten Textbox
    End If
End Sub

Praktische Beispiele

Hier ein weiteres praktisches Beispiel, um die Funktionsweise zu verdeutlichen:

Private Sub TextBox2_DblClick()
    Dim ctrl As Control
    For Each ctrl In Frame3.Controls
        If ctrl Is Me.ActiveControl Then
            ctrl.ForeColor = RGB(255, 0, 0) ' Ändert die Schriftfarbe der aktiven Textbox
        Else
            ctrl.ForeColor = RGB(0, 0, 0) ' Setzt die Schriftfarbe der anderen Textboxen zurück
        End If
    Next ctrl
End Sub

Diese Beispiele helfen dir, die Verwendung des ActiveControl in VBA besser zu verstehen und anzuwenden.


Tipps für Profis

  • Verwende With-Blöcke: Um deinen Code zu optimieren, kannst du With-Blöcke verwenden, um wiederholte Referenzen auf Controls zu vermeiden.

    With Frame3.ActiveControl
       .BackColor = RGB(193, 14, 4)
       .ForeColor = RGB(255, 255, 255)
    End With
  • Fehlerbehandlung: Implementiere Fehlerbehandlung, um unerwartete Fehler zu vermeiden, z.B. wenn kein Control aktiv ist.


FAQ: Häufige Fragen

1. Frage: Wie kann ich die Schriftfarbe eines Labels ändern? Antwort: Labels können keinen Fokus haben, daher ist es nicht möglich, die Schriftfarbe basierend auf ActiveControl zu ändern. Verwende stattdessen Textboxen oder andere Controls, die den Fokus erhalten können.

2. Frage: Was passiert, wenn kein Control aktiv ist? Antwort: Wenn kein Control aktiv ist, kann der Code zu einem Laufzeitfehler führen. Es ist ratsam, vorher zu überprüfen, ob ActiveControl auf Nothing gesetzt ist, um dies zu vermeiden.

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