Clever-Excel-Forum

Normale Version: Active Control Finden
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4
Hallöchen,

also, das ist einfach aber je nach Anzahl der Controls etwas aufwändig … Du dimensionierst in einem allgemeinen Modul eine Variable, z.B.

Public strControl$

und füllst sie wenn Du auf einen Button drückst mit den entsprechenden "Absenderinformationen" Smile

Private Sub CommandButton1_Click()
strControl = "Frame1.CommandButton1"
'... der Code
End Sub

Private Sub CommandButton2_Click()
strControl = "Frame1.CommandButton2"
'... der Code
End Sub

Du hast dann in der Variable immer das letzte betätigte Control.
Hallo!

@ Andre
Ja ist eine möglichkeit.
Habe aber das problem das es bis zu 50 Meldungen sein können, daher ist es ein sehr großer aufwand.

Daher eine neue frage an euch:
Wie ist es möglich das aktive Control ohne das es in einen Frame oder sontiges ist zu ermitteln?
Das Control ist auf einer UF.

Ich gestallte die UF gerade um so das sie ohne Frame's ist
Hallöchen,

anbei mal ein Lösungsansatz. Bei einer größeren Anzahl lohnt sich ein Einstieg in die Klassenprogrammierung. Du müsstest die Checkboxen beim Start des Userform "einsammeln" und dieser Sammlung bzw. den drin enthaltenen Elementen dann die Events zuweisen.
Geht einfach so:


Code:
Private Sub UserForm_Click()
   MsgBox ActiveControl.Name
   If TypeName(ActiveControl) = "Frame" Then
        MsgBox ActiveControl.ActiveControl.Name
        If TypeName(ActiveControl.ActiveControl) = "Frame" Then MsgBox ActiveControl.ActiveControl.ActiveControl.Name
  End If
End Sub


Letzendlich wirst du ein Multipage verwenden.
Hallo snb,

stimmt, einfach so Smile

Ich hab eher daran gedacht, dass da direkt bei Click auf das Control was passieren soll und nicht irgendwann später.
Hallo!

Danke für eure Antworten.

Zitat:Ich hab eher daran gedacht, dass da direkt bei Click auf das Control was passieren soll und nicht irgendwann später.

Andre hat recht so wollte ich es haben.

Werde jetzt erstmal Testen!
Hallo André

Deine Beispiel Datei ist schon fast das was ich gesucht habe.
Mit OptionButton habe ich schon einen Test gemacht und funktioniert. Jetzt brauch ich das ganze für ComboBox oder TextBox.
Da komme ich einfach nicht weiter!
Was und wie muß umgeschrieben werden, kannst du da nochmal helfen?
Hallöchen,

Du müsstest in der Klasse nach den verschiedenen Controls differenzieren und im Userform entsprechende unterschiedliche Collections bilden. Wenn Du genaueres beschreibst, dann kann ich auch genauer drüber schauen Smile
Im Userform


Code:
Dim sp() As New c_check

Public Sub UserForm_Initialize()
    ReDim sp(Controls.Count)
    For Each it In Controls
       If TypeName(it) = "CheckBox" Then Set sp(it.TabIndex).v_CB = it
    Next
End Sub

Im classModule c_check
Code:
Public WithEvents v_CB As MSForms.CheckBox

Private Sub v_CB_Click()
    MsgBox v_CB.Name
End Sub
Und weiter:


Code:
Dim sp() As New c_check

Public Sub UserForm_Initialize()
    ReDim sp(Controls.Count)
    For Each it In Controls
       If TypeName(it) = "CheckBox" Then Set sp(it.TabIndex).v_CB = it
       If TypeName(it) = "OptionButton" Then Set sp(it.TabIndex).v_OB = it
       If TypeName(it) = "TextBox" Then Set sp(it.TabIndex).v_TB = it
       If TypeName(it) = "ComboBox" Then Set sp(it.TabIndex).v_CoB = it
    Next
End Sub


Code:
Public WithEvents v_CB As MSForms.CheckBox
Public WithEvents v_OB As MSForms.OptionButton
Public WithEvents v_TB As MSForms.TextBox
Public WithEvents v_CoB As MSForms.ComboBox

Private Sub v_CB_Click()
    MsgBox v_CB.Name
End Sub
Private Sub v_OB_Click()
    MsgBox v_OB.Name
End Sub
Private Sub v_TB_Change()
    MsgBox v_TB.Name
End Sub
Private Sub v_CoB_DropbuttonClick()
    MsgBox v_CoB.Name
End Sub
Seiten: 1 2 3 4