in diesem Archivthread hatte ich zu dem Thema schon einmal eine Frage gestellt und auch einen hilfreich Tip bekommen:
https://www.herber.de/cgi-bin/callthread.pl?index=1523620
Nach einer weiteren Recherche habe ich mir nun Folgendes zusammengebastelt, was "halbwegs" funktioniert. Ich möchte jetzt nur verstehen, warum es funktioniert ;-) und den Code ggf. noch etwas erweitern. Hier zunächst der Code:
In einem normalen Modul:
Private Declare PtrSafe Function GetSystemMetrics Lib "USER32" (ByVal nIndex As Long) As Long
Private Const SM_CXSCREEN = 0
Private Const SM_CYSCREEN = 1
Public Breite
Public Höhe
Public Sub Formular_Vollbild()
Breite = GetSystemMetrics(SM_CXSCREEN)
Höhe = GetSystemMetrics(SM_CYSCREEN)
End Sub
Im Code der Userform:
Private Sub UserForm_Initialize()
Dim sngWidth As Single, sngHeight As Single
Me.StartUpPosition = 0
sngWidth = Me.Width
sngHeight = Me.Height
Me.Left = 0
Me.Top = 0
Me.Height = Höhe * 0.75
Me.Width = Breite * 0.75
Me.Zoom = Fix(WorksheetFunction.Min(Me.Width / sngWidth, Me.Height / sngHeight) * 100)
End Sub
Der Code öffnet die Userform im Hauptbildschirm und zeigt sie im Vollbildmodus an. Soweit ist alles gut. Mir ist nur nicht ganz klar, warum es funktioniert und insbesondere was die Zeile Me.Zoom = ... bewirkt. Vielleicht kann mir ja jemand den Code noch einmal kurz erläutern.Was ich noch gerne erreichen möchte, ist Folgendes. Wenn Excel geöffnet wird, geschieht das im Hauptbildschirm und das über Workbook_Open geöffnete Formular bedeckt den kompletten Bildschirm. Excel selbst ist nicht mehr sichtbar und für den Anwender nicht mehr zugänglich, und so soll es auch sein. Ziehe ich Excel aber auf den zweiten Bildschirm, wird nach Schließen und Öffnen die Userform auf dem Hauptbildschirm und Excel auf dem zweiten Bildschirm angezeigt. Ich möchte nun erreichen, dass das Formular 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