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
Daniel
12.05.2026 21:24:48
AW: Userform, die sich wie ein normales Fenster verhält?
Wäre es nicht noch einfacher, den .Top bzw .Left- Wert des Controls zum Y und X des MouseMove hinzu zu addieren, um damit das Y und X bezogen auf die Userform zu erhalten?
Gruß Daniel
Als Antwort auf diesen Beitrag
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
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.