Userform positionieren - mehrere Bildschirme

.. das wohl mächtigste Werkzeug in Bill Gates' Büro-Sippe. Ob reine Formeln, PowerQuery oder VBA. Hier bleiben kaum Wünsche unerfüllt.
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Userform positionieren - mehrere Bildschirme

#1

Beitrag von d'r Bastler »

Moin allerseits,

in meinem Beitrag hier hatte ich zwei Konzepte vorgestellt, wie man Userforms auch mit zwei Monitoren vernünftig positionieren kann. :oops: Ich muss leider zugeben, dass das erste Konzept -gelinde gesagt- riesiger Bu....it ist :oops: . Also bitte garnicht erst versuchen! Das was ich da vermeintlich mit wenig Code vorgeschlagen habe, ist im Vergleich zur zweiten Lösung einfach aufgeblasener Schrott ...

Hier noch mal die bessere Lösung, die (ohne es testen können, muss es nach der Mechanik des Codes sicher so sein!) auch mit mehreren Monitoren funktionert:

Code: Alles auswählen

Option Explicit

Private Sub UserForm_Initialize()
Dim iTop As Integer, iLeft As Integer
    
    StartUpPosition = 0
    iTop = Application.Top + Application.Height / 2 - Height / 2
    iLeft = Application.Left + Application.Width / 2 - Width / 2

    Left = iLeft
    Top = iTop

End Sub
Ich hatte schon angedeutet, dass mit anderen Divisoren als 2 => mittig, natürlich auch andere Positionen möglich sind. Bin dann aber noch einen kleinen Grundrechenschritt weiter gegangen: Divisor 2 = Multiplikator 0,5 Daher sieht meine neuer Code, der durch die Option Nachkommastellen wirklich genaue Positionierungen zulässt, so aus:

Code: Alles auswählen

Option Explicit

Private Sub UserForm_Initialize()
Dim iTop As Integer, iLeft As Integer
    
    StartUpPosition = 0
    iTop = Application.Top + Application.Height * 0.29 - Height * 0.29
    iLeft = Application.Left + Application.Width  * 0.335 - Width * 0.335

    Left = iLeft
    Top = iTop

End Sub
Die Beispielwerte verfrachten die Userform auf Monitoren 1920 x 1080 in einem Standardarbeitsblatt XL maximiert mittig in Zelle G5. Will man mit definierten XL-Fenstergrößen arbeiten, beziehen sich die Divisoren/Multiplikatoren jeweils auf Application.Top / .Left.

Viel Spaß damit und -sorry für die Umleitung- :)
Folgende Benutzer bedankten sich beim Autor d'r Bastler für den Beitrag:
Nanu
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Re: Userform positionieren - mehrere Bildschirme

#2

Beitrag von d'r Bastler »

Nachtrag: Eben erfolgreich mit drei Monitoren getestet!

Hatte den Monitor im Notebook nicht bericksichtigt ... :o
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Re: Userform positionieren - mehrere Bildschirme

#3

Beitrag von d'r Bastler »

Moin allerseits,

beim Versuch, ein auf einem Landscape-Monitor gebautes Spiel auf ein Portrait-Tablet zu bugsieren, musste ich feststellen, dass es mit den oben so gelobten Nachkommastellen je nach XL-Version schwierig werden kann. Anscheinend kann XL2019 im Faktor nur eine Nachkommastelle, egal wie deklariert.

Also musste ein Workaround her. Aus

Code: Alles auswählen

StartUpPosition = 0
    iTop = Application.Top + Application.Height * 0.3 - Height * 0.3
    iLeft = Application.Left + Application.Width  * 0.4 - Width * 0.4
habe ich die Application.Width nicht wie gegeben genommen, sondern ihr einfach ein paar (hier 20 ) Pixel geschenkt, um erst dann zu Dividieren/Multiplizieren:

Code: Alles auswählen

iLeft = (Application.Width + 20) * 0.4
Dann klappt's auch auf der Tablette.

lg
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste