Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1852to1856
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Userform auf zweitem Bildschirm mittig
01.11.2021 14:14:30
SteffenS
Hallo Zusammen,
ich habe folgenden Code gefunden, um eine Userform innerhalb des Excel-Fensters zu zentrieren.
With UF
.Top = Application.Top + (Application.Height - .Height) / 2
.Left = Application.Left + (Application.Width - .Width) / 2
End With
Auf dem ersten Bildschirm funktioniert dies auch super.
Verschiebe ich Excel nun auf den zweiten (rechten) Bildschirm so ist die UF am linken Bildschirmrand.
Was kann ich tun, damit die UF unabhängig vom Monitor immer mittig ist?
Danke Euch schon mal.
VG Steffen

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform auf zweitem Bildschirm mittig
01.11.2021 14:20:32
Andreas
Probier mal das im Userform Initalize
'Userform wegen 2. Bildschirm immer mittig positionieren
Dim objApp As Object
Set objApp = ThisWorkbook.Windows.Application
With objApp
Me.Left = .Left + 100
End With
AW: Userform auf zweitem Bildschirm mittig
01.11.2021 14:42:50
Nepumuk
Hallo Steffen,
im Modul des UserForms:

Private Sub UserForm_Initialize()
Call MoveUserform(Me)
End Sub
In einem Standardmodul:

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
Gruß
Nepumuk
Anzeige
AW: Userform auf zweitem Bildschirm mittig
01.11.2021 21:16:36
SteffenS
Hi,
danke für den umfangreichen Code. :-)
Ich habe diesen mal integriert aber leider ist das Ergebnis das Gleiche.
Monitor 1 ist OK, Monitor 2 UF wird ganz links ausgerichtet.
Habt ihr noch eine Idee?
LG Steffen
AW: Userform auf zweitem Bildschirm mittig
01.11.2021 21:37:28
Nepumuk
Hallo Steffen,
kann ich nicht nachvollziehen. Bei mir wird das UserForm auf dem Bildschirm mittig angezeigt auf dem sich Excel befindet.
Bei mir ist in den Einstellungen - System - Anzeige - Mehrere Bildschirme "Diese Anzeigen erweitern" eingestellt.
Gruß
Nepumuk
AW: Userform auf zweitem Bildschirm mittig
02.11.2021 11:11:49
SteffenS
Hallo,
ich habe das ganze jetzt nochmal auf einem anderen Arbeitsplatz getestet und hier ist das Verhalten gleich.
Auf dem zweiten Bildschirm steht die UF immer ganz links.
In den Einstellung ist ebenfalls "Diese Anzeige erweitern" eingestellt.
Habt ihr noch eine Idee
VG Steffen
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige