Userform auf zwei Bildschirmen mittig positionieren
Schritt-für-Schritt-Anleitung
Um deine Userform auf dem zweiten Bildschirm mittig zu positionieren, kannst du folgenden VBA-Code verwenden. Dieser Code sollte im Initialisierungsbereich der Userform eingefügt werden:
Private Sub UserForm_Initialize()
Call MoveUserform(Me)
End Sub
Zusätzlich benötigst du einen Code in einem Standardmodul, um die Position zu bestimmen:
Option Explicit
Private Declare PtrSafe Function EnumDisplayMonitors Lib "user32.dll" ( _
ByVal hdc As LongPtr, _
ByRef lprcClip As LongPtr, _
ByVal lpfnEnum As LongPtr, _
ByVal dwData As Long) As Long
Private Declare PtrSafe Function GetMonitorInfoA Lib "user32.dll" ( _
ByVal hMonitor As LongPtr, _
ByRef lpmi As MONITORINFO) As Long
Private Declare PtrSafe Function MonitorFromWindow Lib "user32.dll" ( _
ByVal hwnd As LongPtr, _
ByVal dwFlags As Long) As LongPtr
Private Declare PtrSafe Function GetDC Lib "user32.dll" ( _
ByVal hwnd As LongPtr) As LongPtr
Private Declare PtrSafe Function ReleaseDC Lib "user32.dll" ( _
ByVal hwnd As LongPtr, _
ByVal hdc As LongPtr) As Long
Private Declare PtrSafe Function GetDeviceCaps Lib "gdi32.dll" ( _
ByVal hdc As LongPtr, _
ByVal nIndex As Long) As Long
Private Type RECT
lngLeft As Long
lngTop As Long
lngRight As Long
lngBottom As Long
End Type
Private Type MONITORINFO
cbSize As Long
rcMonitor As RECT
rcWork As RECT
dwFlags As Long
End Type
Private Const HWND_DESKTOP As LongPtr = 0
Private Const LOGPIXELSX As Long = 88&
Private Const LOGPIXELSY As Long = 90&
Private Const MONITOR_DEFAULTTONEAREST As Long = &H2
Private ludtRect As RECT
Public Sub MoveUserform(ByRef probjUserform As Object)
Dim sngDPI As Single
sngDPI = GetDPI
Call EnumDisplayMonitors(ByVal 0, ByVal 0, AddressOf Read_Monitor, ByVal 0&)
With probjUserform
Call .Move((ludtRect.lngLeft + ludtRect.lngRight) * sngDPI / 2 - .Width / 2, _
(ludtRect.lngBottom + ludtRect.lngTop) * sngDPI / 2 - .Height / 2)
End With
End Sub
Private Function Read_Monitor( _
ByVal pvlngptrMonitor As LongPtr, _
ByVal pvlngptrHdcMonitor As LongPtr, _
ByRef prudtlprcMonitor As RECT, _
ByVal pvlngdwData As Long) As Long
Dim udtMonitorInfo As MONITORINFO
udtMonitorInfo.cbSize = Len(udtMonitorInfo)
Call GetMonitorInfoA(pvlngptrMonitor, udtMonitorInfo)
If MonitorFromWindow(Application.hwnd, MONITOR_DEFAULTTONEAREST) = pvlngptrMonitor Then
ludtRect = udtMonitorInfo.rcWork
Read_Monitor = 0
Else
Read_Monitor = 1
End If
End Function
Private Function GetDPI() As Single
Dim lngptrDevieCaps As LongPtr
lngptrDevieCaps = GetDC(HWND_DESKTOP)
If lngptrDevieCaps <> 0 Then
GetDPI = 72 / ((GetDeviceCaps(lngptrDevieCaps, LOGPIXELSX) + GetDeviceCaps(lngptrDevieCaps, LOGPIXELSY)) / 2)
Call ReleaseDC(HWND_DESKTOP, lngptrDevieCaps)
End If
End Function
Mit diesem Code sollte deine Userform nun sowohl auf dem ersten als auch auf dem zweiten Bildschirm mittig positioniert werden.
Häufige Fehler und Lösungen
Alternative Methoden
Eine alternative Methode, um eine Excel-Datei auf zwei Bildschirmen anzuzeigen, ist das Öffnen von Excel zweimal. Du kannst dies tun, indem du eine neue Instanz von Excel startest:
- Öffne Excel über das Startmenü oder die Verknüpfung.
- Klicke mit der rechten Maustaste auf das Excel-Symbol in der Taskleiste und wähle "Excel" erneut aus.
- Nun kannst du zwei separate Excel-Fenster auf zwei Bildschirmen anzeigen.
Praktische Beispiele
Wenn du ein Excel-Tabellenblatt auf dem zweiten Bildschirm anzeigen möchtest, kannst du die oben genannten VBA-Skripte verwenden. Hier ein Beispiel:
- Erstelle ein neues UserForm.
- Füge die oben genannten Codes in das UserForm und ein Standardmodul ein.
- Starte die Excel-Anwendung und ziehe das Fenster auf den zweiten Bildschirm.
- Die Userform wird nun korrekt positioniert, egal auf welchem Bildschirm sich Excel befindet.
Tipps für Profis
- Nutze die
vba application.left
-Eigenschaft, um die Position von Excel-Fenstern dynamisch zu steuern.
- Experimentiere mit verschiedenen DPI-Einstellungen, um die beste Darstellung auf hochauflösenden Bildschirmen zu erreichen.
- Wenn du regelmäßig mit mehreren Bildschirmen arbeitest, erwäge den Einsatz von Makros zur automatischen Anpassung der Userform-Positionierung.
FAQ: Häufige Fragen
1. Warum wird meine Userform auf dem zweiten Bildschirm nicht mittig angezeigt?
Die Positionierung könnte durch die Anzeigeeinstellungen deines Windows-Betriebssystems beeinträchtigt werden. Stelle sicher, dass "Diese Anzeigen erweitern" aktiviert ist.
2. Kann ich mehrere Excel-Dateien auf zwei Bildschirmen gleichzeitig anzeigen?
Ja, du kannst Excel zweimal öffnen, indem du die Anwendung erneut über die Taskleiste startest. Dadurch kannst du zwei separate Fenster auf unterschiedlichen Bildschirmen haben.