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
Hallo!
Ich möchte gerne wissen welches Control Aktiv ist. Die Controls die ich abfragen möchte sind in einem Frame eingebettet und das Frame wo die Controls sind, wiederum in einen Frame. Wenn ihr euch jetzt schon die Frage stellt warum Frame in Frame, Ich benötige einen ScrollBars die mir nur die Meldungen anzeigt, der Rest der UF muss sichtbar bleiben. Es können bis zu 50 Meldungen sein, Jede Meldung wird in einen Frame dargestellt. Jedes Frame was sichtbar gemacht wird, hat TextBoxen, ComboBoxen, CheckBoxen und OptionsButton die wiederum in ein Frame eingebettet sind. In der Beispiel Datei wird es vielleicht genauer. CommandButton7 Klick das Frame mit den Caption “ Meldung's Auflistung“ wird gefüllt. Wenn ihr dann auf die Combobox in Frame Meldung1 geht und eine wert auswählt färbt sich das Frame oder ihr geht auf die OptionsButton.  
Also ich möchte gerne herausfinden in welchen Frame ich ein Control angeklickt habe um einen weiteren Code zu Starten.
Wie ist das möglich?
Hallo,

es dauert zu lange die vielen Makros auf Sicherheitsrisiken zu prüfen.

mfg
Hallöchen,

nutze doch eine globale variable die Du bei Betätigung eines Controls mit den entsprechenden Informationen fütterst Smile
Hallo zusammen,

hat schon jemand die Datei öffnen können?
@Klaus-Dieter:

ohne Makro gab es keinerlei Probleme die Datei zu öffnen. Bis zum "timeout" habe ich keine Risiken gefunden. Form1 ist recht groß.

Es gibt "ActiveControl" wie es "ActiveCell", "ActiveSheet" bzw "ActiveWorkbook" gibt.

mfg
Hallo,

mit den vielen Frames ist es etwas tückig, aber teste mal mit:


Code:
Sub T_1()
Dim CC As Control
Dim C As Control
Dim Fr As Frame
Dim F As Frame

'On Error Resume Next
Debug.Print "Anf: ", UserForm1.ActiveControl.Name

   For Each CC In UserForm1.Controls
       'Debug.Print CC.Name, TypeName(CC)
       If TypeName(CC) = "Frame" And CC.Visible Then
           
           Set Fr = CC
           
           For Each C In Fr.Controls
               If Not Fr.ActiveControl Is Nothing Then
               Debug.Print , Fr.ActiveControl.Name
                   Exit For
               End If
           Next C
       End If
   Next CC

End Sub


In deiner Datei habe ich alle VBA-Codes gelöscht, wie dieser Code gestartet wird, wird in der Datei deutlich.

mfg
Du hast mit Frames nachgebaut was MS schon eingeaut hat in Userforms: tabstrip oder Multipage.
Verwende in diesem Fall ein Tabstrip.

@Fen

Einfacher wäre:
Code:
msgbox activecontrol.parent.name
Hallo!

Vielen Dank für die Hilfe!
Werde jetzt erstmal Testen
Hallo,

"tabStrip" hat ich nicht gefunden und wiedereinmal das GDS (Google-Deficit-Syndrom) gehabt.

Wenn man mit der rechten Maustaste in einen freinen Raum der UserForm klickt, erhält man ein recht gutes Ergebnis (ins debug-Fenster)

Code:
Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = 2 Then
        'Debug.Print Me.ActiveControl.Name, Me.ActiveControl.Parent.Name
        If InStr(1, Me.ActiveControl.Name, "Frame") > 0 Then
            Set Fr = Me.ActiveControl
            If InStr(1, Fr.ActiveControl.Name, "Frame") > 0 Then Set Fr = Fr.ActiveControl
            
            Debug.Print "--->", Fr.ActiveControl.Parent.Name, Fr.ActiveControl.Name
        Else
            Debug.Print Me.ActiveControl.Name
        End If
    End If
End Sub

mfg
Was ich meine:
Seiten: 1 2 3 4