Ermitteln, welches Label angeklickt wurd
Ich brauche einen Code, mit dem ich feststellen kann, welches von 100 Bezeichnungsfelden (= Label) angeklickt wurde.
Bei Befehlsschaltflächen (Commandbuttons) kann man es mit
MsgBox ActiveControl.Name
ermitteln.
Der Code gibt aber keine Label wieder. Es kommt immer der zuletzt aktivierte Button und nicht das Label.
Ich kann natürlich das einzelne Click-Ereignis jedes Labels abfragen, aber was für ein Aufwand!
Ich hoffe jemand weiß, wie ich in einer Function ermitteln kann, welches Label die Function aufgerufen hat
wenn man im Eigenschaften-Fenster des Labels unter "Beim KLicken" folgendes einträgt, kann man die Function aufrufen und muss nicht das Click-Ereignis programmieren:
=MyFunction()
Wertet man dann in der Function aus, welches Label aktiv war, kann man daraufhin verzweigen.
Bin für jeden Hinweis dankbar
2 Antworten
Kannst du nicht einfach ein Textfeld nehmen, es auf readonly setzen und den Hintergrund und den Rahmen transparent gestalten?
Die Eigenschaft "Beim Klicken" finde ich bei einem Label nicht in VBA von Excel 2010 jedenfalls.
Danke für den Tipp.
Aber 100 Label durch Textboxen ersetzen ist aufwendiger als 100 Klick-Ereignisse zu programmieren.
Ich habe halt schon beim Einstieg die falschen Objekte gewählt. Textboxes können mit ActiveControl.Name ermittelt werden.
Die Eigenschaft "Beim Klicken" für Labels existiert nicht auf dem Tabellenblatt, sondern nur im Userform. Und auch nur, wenn man dass Label dann doppelt anklickt geht der Editor auf und bietet das Klick-Ereignis an. Gilt auch für Excel 2010 und 2003
Das gilt für viele Objekte: Erst nach dem Anklicken kann man im Editor alle Ereignisse sehen, in den Eigenschaften fehlen manchmal welche
@Suboptimierer:
Aber ich habe ich jetzt die Lösung gefunden:
Das generelle Click-Ereignis für alle Labels ist jetzt eine Function:
Function Displayclicked(strCallingLabel As String)
Me.Controls(strCallingLabel).ForeColor = clrRed
Me.Controls(strCallingLabel).FontWeight = 600
Me.Controls(strCallingLabel).ControlTipText = "Schon gewählt"
'und so weiter
End Function
Die Function rufe ich beim Click-Ereignis des einzelnen Labels auf und übergebe ihr den Namen des Labels
Damit ich das nicht manuell machen muss, habe ich eine einmalige Prozedur im Modul geschrieben:
Sub umbenennen()
Dim intRow As Integer
Dim intColumn As Integer
Dim strControlName As String
DoCmd.OpenForm "BingoTafel_Beamer", acDesign, , , acFormEdit, acWindowNormal
'jetzt Klickereignis füllen
For intRow = 1 To 10
For intColumn = 1 To 10
strControlName = "lblNumber" & Format(intRow, "00") & Format(intColumn, "00")
Forms!BingoTafel_Beamer.Controls(strControlName).OnClick = "= DisplayMonth(" & Chr(34) & strControlName & Chr(34) & ")"
Next
Next
DoCmd.Close acForm, "BingoTafel_Beamer", acSaveYes
End Sub
Sehr elegante Lösung. Wenn ich könnte, würde ich dir den Stern geben. :)