HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Entdecke rund 2 Millionen Excel-Lösungen im
Forumsarchiv
Forumbeitrag
Excel-Version des Fragestellers:
2010
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
volti
12.05.2026 18:31:05
AW: Userform, die sich wie ein normales Fenster verhält?
Hallo,

das von Daniel angeführte "Problem" mit mehreren eigenen Koordinatensystemen je Control lässt sich, wenn man es brauchen sollte, relativ einfach lösen:

Man lenkt alle Moveaktivitäten der Controls und der Userform selbst in eine Sammel-Sub um und lässt dort die Position der Maus einheitlich für die Userform umrechnen.

Hier ein Beispiel:
Private Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr

Private Declare PtrSafe Function ScreenToClient Lib "user32" ( _
ByVal hwnd As LongPtr, lpPoint As POINTAPI) As Long
Private Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Type POINTAPI
X As Long
Y As Long
End Type

Dim PT As POINTAPI

Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Call GetMausPos
End Sub
Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Call GetMausPos
End Sub
Private Sub ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Call GetMausPos
End Sub

Private Sub GetMausPos()
GetCursorPos PT
ScreenToClient GetActiveWindow(), PT
Debug.Print PT.X, PT.Y
End Sub


Hierbei wird davon ausgegangen, dass die Userform zwingend das gerade aktive Fenster ist. Müsste eigentlich immer so sein. Wer auf Nummer sicher gehen will, kann sich ja vorher z.B. über FindWindow das UF-Handle in einer Modulvariablen hWndUF retten und verwenden.

Beim Massengeschäft mit sehr vielen Controls gäbe es auch noch die Möglichkeit, sich in die Messageschleife einzuhooken oder Klassenprogrammierung zu verwenden.
Aufwand/Nutzen selbst beurteilen.

Gruß
Karl-Heinz
Als Antwort auf diesen Beitrag
daniel
12.05.2026 15:31:58
AW: Userform, die sich wie ein normales Fenster verhält?
Hi
bei mir funktioniert dein Marko nicht.
wenn du mit der Maus über ein Steuerlement fährst, dann läuft das MouseMove des Steuerelements, aber nicht das MouseMove der Userform!
das MM der Userform läuft nur, wenn du über die leere Userformfläche fährst.
du brauchst also MouseMove des Buttons, musst hierbei aber beachten, dass der wieder sein eigenes Koordinatensystem hat, welches bei der linken oberen Ecke des Buttons seinen 0-Punkt hat.
bei den Randsensitivitäten musst du berücksichtigen, dass der 0-Punkt der Koordinaten in der linken oberen Ecke der nutzbaren Diagrammfläche liegt, .Height und .Width jedoch inklusive der Rahmen und Titelleiste sind.
Gruß Daniel
Antwort auf Beitrag erstellen
Bitte einen Anwendernamen ohne @ eingeben.
Bitte das Passwort eingeben.
Bitte eine gültige E-Mail-Adresse eingeben.
Bitte einen Betreff eingeben.
Weitere Optionen
Aktivieren, wenn die Frage/der Beitrag noch nicht beantwortet wurde und unter Listen > Offene Threads erscheinen soll.
Beispieldatei hochladen

Bitte einen Nachrichtentext eingeben.