Ich hoffe hier evtl. Hilfe zu finden mit einem aktuellen VBA-Problem im Outlook.
Ich habe dort eine UserForm, welche ich gerne anzeigen möchte auf dem Bildschirm.
Die UserForm soll immer mittig dargestellt werden.
Egal, ob 1, 2, 3 oder 4 Monitore angeschlossen sind.
Dort, wo das Outlook-Fenster geöffnet ist, dort soll auch mittig die UserForm erscheinen - analog den Messagboxen.
Ich habe nun etliche Dinge schon ausprobiert.
Die Userform erscheint aber an unterschiedlichen Positionen, je nach Monitor (1, 2, 3 oder 4). Von oben her ist es immer gleich.
Beim ersten Monitor links von der Mitte
Beim zweiten Monitor eher mittig
Beim dritten Monitor rechts aussen - teilweise nicht mehr zu sehen
Kann mir da jemand einen Tip geben?
Mit folgenden Code habe ich zuletzt meine Versuche gemacht:
Private Sub UserForm_Initialize()
Dim olApp As Object
Dim sngLeft As Single, sngTop As Single
Dim olExplorer As Object
Dim olInspector As Object
Dim olWindow As Object
' Überprüfen, ob Outlook geöffnet ist
On Error Resume Next
Set olApp = GetObject(, "Outlook.Application")
On Error GoTo 0
' Überprüfen, ob ein Explorer-Fenster geöffnet ist
If Not olApp Is Nothing Then
Set olExplorer = olApp.ActiveExplorer
If Not olExplorer Is Nothing Then
sngLeft = olExplorer.Left + (olExplorer.Width - Me.Width) / 2
sngTop = olExplorer.Top + (olExplorer.Height - Me.Height) / 2
End If
End If
' Überprüfen, ob ein Inspector-Fenster geöffnet ist
If sngLeft = 0 And sngTop = 0 Then
On Error Resume Next
Set olInspector = olApp.ActiveInspector
On Error GoTo 0
If Not olInspector Is Nothing Then
sngLeft = olInspector.Left + (olInspector.Width - Me.Width) / 2
sngTop = olInspector.Top + (olInspector.Height - Me.Height) / 2
End If
End If
' Wenn kein Explorer oder Inspector gefunden wurde, Fenster zentrieren basierend auf Outlook-Fenster
If sngLeft = 0 And sngTop = 0 Then
Set olWindow = olApp.ActiveWindow
If Not olWindow Is Nothing Then
sngLeft = olWindow.Left + (olWindow.Width - Me.Width) / 2
sngTop = olWindow.Top + (olWindow.Height - Me.Height) / 2
End If
End If
' Wenn kein gültiges Fenster gefunden wurde, verwenden Sie die Bildschirmmitte
If sngLeft = 0 And sngTop = 0 Then
sngLeft = (Application.Width - Me.Width) / 2
sngTop = (Application.Height - Me.Height) / 2
End If
' Position der UserForm festlegen
Me.Left = sngLeft
Me.Top = sngTop
End Sub