Tipp 0526 UserForm - ActiveControl-Eigenschaft
Autor/Einsender:
Datum:
  Angie
17.12.2006
Entwicklungsumgebung:   Excel 2000
Die ActiveControl-Eigenschaft ist schreibgeschützt und wird festgelegt, wenn ein Steuerelement in der Oberfläche ausgewählt wird. ActiveControl kann als Ersatz für den Namen des aktiven Steuerelements verwendet werden, um beispielsweise Eigenschaften festzulegen oder Methoden aufzurufen.
Laut VB(A)-Hilfe kennzeichnet die ActiveControl-Eigenschaft das Steuerelement mit dem Fokus (die Fähigkeit, zu einem Zeitpunkt Mausklicks oder Tastatureingaben zu empfangen) und ermöglicht dessen Bearbeitung.
Mit folgender Codezeile kann der Name des aktiven Steuerelements mit dem Fokus in einer MsgBox zurückgegeben werden, allerdings, im Gegensatz zu einer VB-Anwendung, in einer VBA-Anwendung (z.B. in Excel und Word) nur dann, wenn sich das Steuerelement direkt auf der UserForm befindet und nicht in einem sogenannten Container (MultiPage und/oder Frame).
 
MsgBox Me.ActiveControl.Name
 
Das heißt, befindet sich eine TextBox, die den Fokus besitzt, beispielsweise in einem Frame, das direkt auf der UserForm platziert ist, wird mit obigem Beispiel der Name des Frames zurückgegeben und nicht der Name der TextBox.
In der Excel-VB(A)-Hilfe ist ein Beispiel enthalten, in dem die ActiveControl-Eigenschaft in einer Subroutine eingesetzt wird, die die vom Benutzer verwendeten Steuerelemente registriert. Das Enter-Ereignis für die einzelnen Steuerelemente ruft die Subroutine auf. Diese identifiziert das Steuerelement, das jeweils den Fokus hat. Das entsprechende Steuerelement könnte in der Objektvariable gespeichert werden.
Für das Beispiel in der Excel-VB(A)-Hilfe müssen für die jeweiligen Steuerelemente die entsprechenden Enter-Ereignisse im Codebereich der UserForm hinzugefügt werden, was, je nach Anzahl der Steuerelemente auf der UserForm, in sehr viel Code "ausarten" kann.
Mit weniger Code kann mit der folgenden benutzerdefinierten Funktion das aktive Steuerelement, das Mausklicks oder Tastatureingaben empfangen kann, ermittelt werden.
 
Function GetActiveControl(ByRef objCtrl As MSForms.Control) _
      As MSForms.Control
  If Not objCtrl Is Nothing Then
    Select Case True
      Case TypeOf objCtrl Is MSForms.MultiPage
        Set objCtrl = objCtrl.SelectedItem.ActiveControl
        Set objCtrl = GetActiveControl(objCtrl)

      Case TypeOf objCtrl Is MSForms.Frame
        Set objCtrl = objCtrl.ActiveControl
        Set objCtrl = GetActiveControl(objCtrl)

      Case Else
    End Select
  End If
  Set GetActiveControl = objCtrl
End Function
 
Um obige Funktion testen zu können, kann der folgende Code entweder im UserForm_Click-Ereignis oder aber im Click-Ereignis eines CommandButtons aufgerufen werden. Bei Verwendung eines CommandButtons muss dieser direkt auf der UserForm platziert und die Eigenschaft TakeFocusOnClick auf False (!) gesetzt werden.
 
Dim objCtrlA As MSForms.Control
Set objCtrlA = GetActiveControl(Me.ActiveControl)
If Not objCtrlA Is Nothing Then
  MsgBox objCtrlA.Name
Else
  MsgBox "Kein aktives Steuerelement!"
End If
 
Das Download-Beispiel ist so konzipiert, dass zum Vergleich sowohl die Rückgabe der ActiveControl-Eigenschaft also auch die der Funktion in einer TextBox ausgegeben werden.
Hinweis für Access-Anwender
In Access kann die ActiveControl-Eigenschaft zusammen mit dem Screen-Objekt verwendet werden, um das Steuerelement zu kennzeichnen oder auf das Steuerelement zu verweisen, das den Fokus besitzt. In der Access-VB(A)-Hilfe sind Beispiele zum Thema enthalten.
Hinweis
Die im Download befindliche *.frm-Datei kann in den unten angegebenen Anwendungen im VB-Editor importiert werden.
Anmerkung: Ab Access 2000 können *.frm-Dateien zwar importiert werden, es handelt sich hier jedoch nicht um die Formulare und Steuerelemente, die üblicherweise in Access verwendet werden.

Windows-Version
95
98
ME
NT
2000
XP
Vista
Win 7
Anwendung/VBA-Version
Access 97
Access 2000
Access XP
Access 2003
Access 2007
Access 2010
Excel 97
Excel 2000
Excel XP
Excel 2003
Excel 2007
Excel 2010
Word 97
Word 2000
Word XP
Word 2003
Word 2007
Word 2010
PPT 97
PPT 2000
PPT XP
PPT 2003
PPT 2007
PPT 2010
Outlook 97
Outlook 2000
Outlook XP
Outlook 2003
Outlook 2007
Outlook 2010


Download  (17,6 kB) Downloads bisher: [ 646 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Sonntag, 19. Juni 2011