Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1528to1532
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
Inhaltsverzeichnis

In welchem von 2 Monitoren wird Excel angezeigt?

In welchem von 2 Monitoren wird Excel angezeigt?
01.12.2016 16:27:55
2
Hallo,
in früheren Threads, die leider schon geschlossen sind, habe ich von Franz (fcs) und Michael Hilfe zum Thema Darstellung einer Userform bei zwei Bildschirmen erhalten, dafür meinen herzlichen Dank.
Nun bleibt noch ein Punkt offen: Ich möchte nun erreichen, dass die Userform immer in dem Bildschirm angezeigt wird, in dem auch Excel angezeigt wird. Ich müsste also ermitteln, auf welchem Bildschirm Excel angezeigt wird und dann per Code festlegen, dass auch die Userform in diesem Bildschirm angezeigt werden soll. Wie geht das?
Gruß
Martin

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: In welchem von 2 Monitoren wird Excel angezeigt?
02.12.2016 15:58:27
2
Hallo,
in einem Standardmodul:
Option Explicit

Private Declare Function EnumDisplayMonitors Lib "user32.dll" ( _
    ByVal hdc As Long, _
    ByRef lprcClip As Any, _
    ByVal lpfnEnum As Long, _
    ByVal dwData As Long) As Long
Private Declare Function GetMonitorInfoA Lib "user32.dll" ( _
    ByVal hMonitor As Long, _
    ByRef lpmi As MONITORINFO) As Long
Private Declare Function MonitorFromWindow Lib "user32.dll" ( _
    ByVal hwnd As Long, _
    ByVal dwFlags 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 MONITOR_DEFAULTTONEAREST = &H2

Private ludtRect As RECT

Public Sub MoveUserform(ByRef probjUserform As Object)
    Dim udtDeleteRect As RECT
    Call EnumDisplayMonitors(ByVal 0&, ByVal 0&, AddressOf Read_Monitor, ByVal 0&)
    With probjUserform
        Call .Move((ludtRect.lngLeft - (ludtRect.lngRight) * -1) * 0.75 / 2 - .Width / 2 _
            , ludtRect.lngBottom * 0.75 / 2 - .Height / 2)
    End With
End Sub

Private Function Read_Monitor( _
        ByVal pvlngMonitor As Long, _
        ByVal pvlngHdcMonitor As Long, _
        ByRef prudtlprcMonitor As RECT, _
        ByVal pvlngdwData As Long) As Long

    Dim udtMonitorInfo As MONITORINFO
    udtMonitorInfo.cbSize = Len(udtMonitorInfo)
    Call GetMonitorInfoA(pvlngMonitor, udtMonitorInfo)
    If MonitorFromWindow(Application.hwnd, MONITOR_DEFAULTTONEAREST) = pvlngMonitor Then
        ludtRect = udtMonitorInfo.rcWork
        Read_Monitor = 0
    Else
        Read_Monitor = 1
    End If
End Function

Der Aufruf erfolgt aus dem Modul des Userforms so:
Private Sub UserForm_Initialize()
    Call MoveUserform(Me)
End Sub

Gruß
Nepumuk
Anzeige
AW: In welchem von 2 Monitoren wird Excel angezeigt?
06.12.2016 11:05:49
2
Hallo Nepumuk,
zunächst mal vielen Dank. Ich habe das ausprobiert mit folgendem Zwischenergebnis:
Zunächst gab es eine Fehlermeldung beim Kompilieren, ich müsse den Code auf 64-Bit Systeme aktualisieren und die Declare-Anweisungen mit den PtrSafe-Attribut markieren. Ich habe dann zwischen Declare und Function jeweils PtrSafe eingefügt, die Fehlermeldung kam dann nicht mehr. Dafür bekommen ich nun die Fehlermeldung beim Kompilieren "Typen unverträglich", markiert ist der der Ausdruck "AddressOf Read_Monitor".
Kannst du mir hier noch einmal weiterhelfen?
Gruß
Martin
AW: In welchem von 2 Monitoren wird Excel angezeigt?
06.12.2016 12:08:20
2
Hallo,
dann hast du schlechte Karten, denn der AddressOf - Operator wird von der 64B-Version nicht unterstützt.
Gruß
Nepumuk
Anzeige
AW: In welchem von 2 Monitoren wird Excel angezeigt?
06.12.2016 13:55:49
2
Hallo,
trotzdem Danke. Dann lebe ich mit der Lösung, die ich bisher erarbeitet habe.
Gruß
Martin

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige