problem mit Klassen und dem Click Event mehrerer Labels
#1
Exclamation 
Hallo Zusammen,

ich versuche mich gerade in das Thema Klassen in VBA einzuarbeiten. Leider macht es noch nicht so ganz Klick.

Prinzipiell möchte ich folgendes Problem lösen:

In einer UserForm habe ich 4 Labels. Wenn ich auf Label 1 klicke soll es mir den Namen des Labels anzeigen. Wenn ich dann auf das zweite klicke, soll es mir den Namen vom zuletzt angeklickten Label anzeigen und das vom aktuell angeklickten.

Ok bei 4 Labels wäre das jetzt kein Großes Problem, da bekommt jedes Label eine Funktion zugewiesen und fertig ist man. Aber ich habe für mein Projekt später mehr als 4 Labels und diese werden erst nach Aufruf der UserForm generiert und beschrieben.

Im Netz habe ich jetzt eine Vorlage gefunden, mit der ich jedes Label ansprechen und mir den jeweiligen Wert ausgeben lassen kann. Das Funktioniert soweit gut, aber in dem Klassenmodul kann ich keinen Variablenwert ausgeben lassen, um mir dann den Wert des zuletzt angeklickten Labels anzuzeigen.


Hier mal Der Code:

Klassenmodul "Klasse1":
Code:
Option Explicit

Public WithEvents objLabel As MSForms.Label

Private Sub objLabel_Click()
MsgBox objLabel.Name & ", " & objLabel.Caption
End Sub

Modul1:
Code:
Option Explicit

Public ConLabel() As New Klasse1

Modul2:

Code:
Option Explicit

Sub Schaltfläche1_KlickenSieAuf()
UserForm1.Show
End Sub

UserForm1:
Code:
Option Explicit


Private Sub UserForm_Initialize()
Dim i As Integer, ii As Integer

For i = 0 To Me.Controls.Count - 1
If TypeName(Controls(i)) = "Label" Then
 ReDim Preserve ConLabel(ii)
 Set ConLabel(ii).objLabel = Controls(i)
 ii = ii + 1
End If
Next i

End Sub


Ich hoffe es ist halbwegs verständlich ausgedrückt und ihr könnt mir den entscheidenden Tipp geben.
Top
#2
Hallo,

Modul Modul1
Option Explicit 

Public ConLabel() As New Klasse1
Public strLabelVorher As String



VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 14 - mit VBAHTML 12.6.0


Klassenmodul Klasse1
Option Explicit 

Public WithEvents objLabel As MSForms.Label

Private Sub objLabel_Click()
 MsgBox strLabelVorher & ", " & objLabel.Name
 strLabelVorher = objLabel.Name
End Sub


VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 14 - mit VBAHTML 12.6.0


Gruß Uwe
Top
#3
Vielen Dank Uwe,

dann hatte ich es ja doch richtig verstanden. So habe ich es vorher auch schon mal ausgeführt. Aber ich hatte die Public Variable in der Klasse Definiert. Das war der Fehler.

Danke für die schnelle Antwort. Jetzt kann  es weiter gehen.

Grüße Danny
Top
#4
Hallo,

ich bin über die Suche auf diesen Beitrag gestoßen.
In meiner Userform befinden sich statt Labels TextBoxen und
beim Befüllen der einzelnen Textboxen soll ein Makro ausgeführt werden.
Wie kann ich den Code anpassen um das Click_Event nur in bestimmten
Textboxen auzulösen?

Gruß

tmessers
Top
#5
Hallo,

(05.03.2019, 13:31)tmessers schrieb: Wie kann ich den Code anpassen um das Click_Event nur in bestimmten
Textboxen auzulösen?
Gar nicht, weil TextBoxen kein Click-Ereignis haben.

Gruß Uwe
Top
#6
Ok, ich verstehe.
Ich brauche also ein Klassenmodul für ein TextBox.Change Event?
Wie sähe der Code für bestimmte TextBoxen aus?
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste