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.

