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

Forumthread: Label - click Ereignis

Label - click Ereignis
11.09.2005 10:23:05
Ingo
Level gut mit Einschränkung ;-)
Guten Morgen,
in einer UF habe ich rund 70 Label.
Die Beschriftung lasse ich aus einem Array in einer
Schleife einlesen.Soweit auch alles gut. Nun soll die
Möglichkeit bestehen, einen Wert ändern zu können -
dazu möchte ich das click-Ereignis auslösen und eine
TextBox für die Eingabe anzeigen lassen. Auch kein Problem.
Was ich nun nicht hinbekomme ist die Abfrage, ob und welches Label
"geklickt" wurde.
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Label - click Ereignis
11.09.2005 10:45:58
Ramses
Hallo
Doppelklick auf das Label der UF

Private Sub Label1_Click()
MsgBox Me.Label1.Name
End Sub

So kannst du auch den Namen an eine Subroutine übergeben
Gruss Rainer
AW: Label - click Ereignis
11.09.2005 10:54:41
Ingo
Hallo Rainer,
das ist natürlich so richtig...aber dann müsste ich rund 70 click-Ereignisse
schon mal im Vorwege definieren ( und evtl. brauche ich manche nie )
Ich dachte eher an eine Abfrage in Form einer "Aktionsüberwachung"...Wenn ein Label angecklickt wird ermittel die LabelNr. und öffne TextBox...
keine Ahnung, wie ich das ausdrücken soll ;-)
Dann hätte ich nur eine Routine für alle 70 Label
Anzeige
AW: Label - click Ereignis
11.09.2005 11:20:39
Ingo
Hey mein Lieber, ich sagte Level-gut mit Einschränkung ;-))
Da werde ich heute Nachmittag wohl ein wenig die grauen Zellen strapazieren,
um das System zu verinnerlichen.
Ist aber wohl genau das, was ich mir vorgestellt hatte.
Herzliche Dank dafür !
Gruß, Ingo
Anzeige
AW: Label - click Ereignis
12.09.2005 08:24:52
Ingo
Moin Sepp,
gestern habe ich Deine Beispielmappe erfolgreich bei mir eingebunden.
Der Stand der Dinge ist jetzt folgender:
Werte aus einer (dynamischen)Tabelle werden in ein Array eingelesen.
Nach Größe des Array werden in einer UF Label aus einem Klassenmodul erstellt und beschriftet. Das Textfeld von Deiner Mappe tut' auch seinen Dienst.
Beim Initialisieren der UF wird mit...
If TypeOf item Is MSForms.Label Then
i = i + 1
ReDim Preserve cLbl(i)
Set cLbl(i) = New clsFahrzeug
cLbl(i).setCntrl item
folgende

Function aus dem Klassenmodul aufgerufen
Public 

Function setCntrl(cntrl As MSForms.Control) As Object
Set setCntrl = Nothing
Set lblWerte = cntrl
Set setCntrl = Me
End Function

Kannst Du mir mit (einfachen) Worten erklären, was hier passiert ?
Das erschliesst sich mir noch nicht richtig...
Werden die Label hier durch neue Label ersetzt ?
Vielen Dank und Gruß
Ingo
Anzeige
AW: Label - click Ereignis
12.09.2005 19:11:47
Josef
Hallo Ingo!
Da passiert nichts anderes, als das jedes Label der Klasse zugewiesen wird!
Denn nur dann stehen die Events der Klasse zur Verfügung.
'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: Label - click Ereignis
12.09.2005 20:43:13
Ingo
Nabend Sepp,
nun bin ich noch irritierter ;-)
in meiner Userform lasse ich mit
.....
Dim lblWerte As MSForms.Label
Dim lbl_spalte As Integer
Dim lbl_zeile As Integer
Set oCommand1 = New clsFahrzeug (hier ist doch mein Klassenmodul ? )
Set oCommand1.lblWerte = Label
For lbl_zeile = 1 To rows_zähler ' Label Zeilenweise
For lbl_spalte = 1 To cells_zähler 'Label Spaltenweise
Set oCommand1.lblWerte = Controls.Add("Forms.Label.1")
With oCommand1.lblWerte
usw..............
doch bereits meine Label mit Bezug auf die Klasse erstellen.
Wenn ich den anschließenden Programmteil ( der von Dir)
If TypeOf item Is MSForms.Label Then
i = i + 1
ReDim Preserve cLbl(i)
Set cLbl(i) = New clsFahrzeug
cLbl(i).setCntrl item
nicht ausführen lasse, funktioniert die Geschichte mit dem txtEdit nicht mehr.
Hmmm...warum muß ich die mit Bezug auf die Klasse erstellten Label der Klasse zuordnen?
Ein (ähnlich) wie die Label erstellter CommandButton führt ja auch klaglos das Event(Unload) der Klasse aus.
Zumindest weiß ich jetzt, warum ich Level gut mit "Einschränkung" bemerkt habe ;-)
Zur Zeit langt es mir wirklich, dass es funktioniert wie gewollt - aber eine Erklärung würde mich schon interessieren.
Falls Du also noch mal 'ne Sekunde Zeit hast meinen Wissenshunger zu stillen, wäre das toll.
So oder so wars' eine große Hilfe.
Danke und Gruß
Ingo
Anzeige
AW: Label - click Ereignis
12.09.2005 22:43:40
Josef
Hallo Ingo!
Du kannst ales in einem Aufwasch erledigen, ohne zweite Schleife!
Zur Veranschaulichung noch ein Beispiel mit einem UF nur mit
dynamisch erstellten Controls.
https://www.herber.de/bbs/user/26510.xls
'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
verstanden
13.09.2005 07:23:37
Ingo
Guten Morgen/Tag Sepp
danke für die gestrige, anschauliche Beispielmappe.
Nun wird mir das Prinzip langsam klar und ich komme
dahinter, warum einige Aktionen bei mir funktionierten
und manche wieder nicht.
Ich hab' wieder eine ganze Ecke weit was neues gelernt.
Vielen Dank für Deine Unterstützung !
Gruß, Ingo
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Click-Ereignis bei Labels in Excel VBA


Schritt-für-Schritt-Anleitung

Um ein Click-Ereignis für Labels in einer UserForm zu realisieren, befolge diese Schritte:

  1. UserForm erstellen: Öffne den VBA-Editor (ALT + F11) und füge eine neue UserForm hinzu.

  2. Labels hinzufügen: Füge 70 Labels zu deiner UserForm hinzu, entweder manuell oder durch ein Skript, das sie aus einem Array befüllt.

  3. Klassmodul erstellen: Erstelle ein neues Klassenmodul (z.B. clsFahrzeug), in dem die Label-Logik implementiert wird.

  4. Click-Ereignis definieren: Implementiere ein gemeinsames Click-Ereignis für alle Labels. Hier ein Beispiel:

    Private Sub Label_Click()
       MsgBox "Du hast " & Me.ActiveControl.Name & " geklickt."
    End Sub
  5. Labels an das Click-Ereignis binden: Stelle sicher, dass alle Labels auf die gleiche Subroutine verweisen. Dies kannst du durch einen For-Loop im Code erreichen:

    For Each ctrl In Me.Controls
       If TypeOf ctrl Is MSForms.Label Then
           AddHandler ctrl.Click, AddressOf Label_Click
       End If
    Next ctrl
  6. TextBox öffnen: Um bei einem Klick auf ein Label eine TextBox anzuzeigen, erweitere die Label_Click-Subroutine:

    Private Sub Label_Click()
       MsgBox "Du hast " & Me.ActiveControl.Name & " geklickt."
       ' TextBox anzeigen
       txtInput.Visible = True
    End Sub

Häufige Fehler und Lösungen

  • Fehler: Click-Ereignis wird nicht ausgelöst
    Lösung: Überprüfe, ob die Labels korrekt an die Subroutine gebunden sind. Stelle sicher, dass die Labels nicht deaktiviert oder unsichtbar sind.

  • Fehler: Der Name des Labels wird nicht angezeigt
    Lösung: Stelle sicher, dass die ActiveControl-Eigenschaft auf das richtige Label verweist. Möglicherweise musst du die Referenz auf den ActiveControl korrekt setzen.


Alternative Methoden

Eine andere Methode, um das Click-Ereignis der Labels zu steuern, ist die Verwendung von WithEvents in einem Klassenmodul. Hier ein einfaches Beispiel:

' Klassenmodul: clsLabel
Dim WithEvents lbl As MSForms.Label

Private Sub lbl_Click()
    MsgBox "Label " & lbl.Name & " wurde geklickt."
End Sub

Das gibt dir die Möglichkeit, für jedes Label eine separate Instanz zu erstellen, die das Click-Ereignis verfolgt.


Praktische Beispiele

Ein praktisches Beispiel wäre eine UserForm, die eine Liste von Fahrzeugen anzeigt, wobei jedes Fahrzeug durch ein Label repräsentiert wird. Bei einem label click wird der Name des Fahrzeugs in einer TextBox angezeigt, wodurch der Benutzer den Wert ändern kann.

Private Sub UserForm_Initialize()
    Dim i As Integer
    For i = 1 To 70
        Dim lbl As MSForms.Label
        Set lbl = Me.Controls.Add("Forms.Label.1", "Label" & i)
        lbl.Caption = "Fahrzeug " & i
        lbl.Top = i * 20
        lbl.Left = 10
        AddHandler lbl.Click, AddressOf Label_Click
    Next i
End Sub

Tipps für Profis

  • Nutze Dynamic Controls, um die Anzahl der Labels zu steuern und die Performance zu verbessern.
  • Verwende Enum für die Labels, um den Code lesbarer zu machen.
  • Implementiere Error-Handling, um unerwartete Fehler während der Ausführung zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Labels mit einem einzigen Ereignis verknüpfen?
Du kannst eine Schleife verwenden, um jedem Label das gleiche Click-Ereignis zuzuweisen.

2. Was mache ich, wenn ich das Click-Ereignis nicht auslösen kann?
Überprüfe die Sichtbarkeit und Aktivierung deiner Labels sowie die Bindung an die Subroutine. Achte darauf, dass keine anderen Controls den Zugriff blockieren.

3. Wie kann ich ein Label in einer UserForm dynamisch erstellen?
Verwende den Controls.Add-Befehl innerhalb einer Schleife, um Labels dynamisch zu generieren.

4. Welche Excel-Version benötige ich für diese Beispiele?
Die vorgestellten Methoden sind für Excel 2010 und höher geeignet, die VBA und MSForms unterstützen.

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