Während sich die Frage nach dem Handle des Hauptfensters der Userform noch eindeutig beantworten lässt, ist dies für die Controls auf dem Hauptfenster nicht immer möglich.
Der Versuch mit Spy++ liefert grundsätzlich nur zwei Kinder-Fenster.
Offensichtlich ist es so, dass die Kinder-Controls lediglich in einem Behälter abgebildet werden.
Um trotzdem zu einem Handle zu kommen, gibt es folgenden Trick:
- das fragliche Control mit SetFocus aktivieren
- mit der Api-Funktoin 'GetFocus' den Handle ermitteln
Leider sind die Handle für alle Buttons gleich. Auch die Handles der Option- und Check-Boxen sind identisch.
Im einzelnen:
Kontroll-Typ | Ergebnis |
Label | Uneindeutig |
TextBox | Uneindeutig |
ComboBox | Uneindeutig |
ListBox | Eindeutig |
CheckBox | Uneindeutig |
OptionButton | Uneindeutig |
ToggleButton | Uneindeutig |
Frame | Eindeutig |
CommandButton | Uneindeutig |
TabStrip | Uneindeutig |
MultiPage | Eindeutig |
ScrollBar | Uneindeutig |
SpinButton | Uneindeutig |
Image | Uneindeutig |
TreeView | Eindeutig |
ProgressBar | Eindeutig |
Mit anderen Worten: Sinnvoll einsetzbar sind Api-Anweisungen allenfalls bei folgenden VBA-Controls:
- ListBox
- Frame
- MultiPage
- TreeView
- ProgressBbar
Hierbei ist darauf zu achten, dass der Handle bei jedem Aufruf desselben Controls einen anderen Wert annimmt.