27.04.2018, 11:22
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":
Modul1:
Modul2:
UserForm1:
Ich hoffe es ist halbwegs verständlich ausgedrückt und ihr könnt mir den entscheidenden Tipp geben.
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.