|
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.
|
|
|
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 ]
|
|
|