Excel 2016 VBA Fenstergröße an Bildschirm automatisch anpassen

Bermont

Cadet 3rd Year
Registriert
Nov. 2019
Beiträge
47
Hallo ich bräuchte mal eure Hilfe. Und zwar möchte ich in VBA meine Fenstergröße einer UserForm automatisch an den Bildschirm anpassen lassen.
Die Taskleiste sollte hierbei am besten sichtbar bleiben. Habe im Internet kein Video oder eine Erklärung gefunden, die mir bisher so wirklich weiterhelfen konnte.

Ein Kollege hat folgenden Code verwendet:

Private Declare PtrSafe Function GetSystemMetrics Lib "user32.dll" ( _
ByVal nIndex As Long) As Long

Private Const SM_CXSCREEN As Long = 0
Private Const SM_CYSCREEN As Long = 1

Wenn ich diesen verwende, ist mein Fenster auf dem Laptop links oben ausgerichtet und sowohl unten und rechts erkennt man die Excel-Tabelle. Ich vermute das es an der unterschiedlichen Auflösung liegt. Wie kann ich hier das ganze so programmieren, dass es sich automatisch an den Bildschirm anpasst?

Ich habe mal das Bild mit angehängt wie es bei meinem Kollegen aussieht.

Vielen Dank für eure HIlfe :)
 

Anhänge

  • Fenstergröße.jpg
    Fenstergröße.jpg
    99,6 KB · Aufrufe: 384
@Janush Habe noch das hier gefunden. Sorry war mein Fehler. Für mich ist VBA noch neu daher ist für mich manches noch bisschen wie Bahnhof verstehen :D

'Bildschirm
mobreite = GetSystemMetrics(SM_CXSCREEN)
mohöhe = GetSystemMetrics(SM_CYSCREEN)

'Userform
breite = UserForm1.Width
höhe = UserForm1.Height
'Excel-Fenster
breite2 = Application.Width
höhe2 = Application.Height
ftop = Application.Top
fleft = Application.Left

randabstand = 7

UserForm1.StartUpPosition = 0
UserForm1.Left = fleft + randabstand
UserForm1.Top = ftop + randabstand
UserForm1.Width = breite2 - 2 * randabstand
UserForm1.Height = höhe2 - 2 * randabstand

If breite2 < breite Then
zoomfa = breite2 / breite * 100
UserForm1.Zoom = zoomfa
End If

'Zoomwert
' x = breite2 / breite * 100
' Y = höhe2 / höhe * 100
' If x < 100 And Y < 100 Then
' If x > Y Then
' UserForm1.Zoom = Y
' Else
' UserForm1.Zoom = x
' End If
' End If
 
Habe deinen Code gerade mal ausprobiert und nach ein paar Anpassungen funktioniert er auch ganz gut :-)

Die Hälfte von dem, was du da hast, brauchst du gar nicht. Mich würde mal interessieren, wie du das bei dir eingebunden hast und wie du den Code aufrufst.

Hier ist der angepasste Code, welchen du bei dir in dein UserForm (Benutzer Formular, keine Form :-) ) einfügen musst.

Code:
Option Explicit

Private Sub UserForm_Initialize()

Dim breite      As Integer
Dim breite2     As Integer

Dim höhe        As Integer
Dim höhe2       As Integer

Dim ftop        As Integer
Dim fleft       As Integer

Dim zoomfa      As Double

Dim randabstand As Integer

With Me

    'Userform
    breite = .Width
    höhe = .Height
    'Excel-Fenster
    breite2 = Application.Width
    höhe2 = Application.Height
    ftop = Application.Top
    fleft = Application.Left
    
    randabstand = 7

    .StartUpPosition = 0
    .Left = fleft + randabstand
    .Top = ftop + randabstand
    .Width = breite2 - 2 * randabstand
    .Height = höhe2 - 2 * randabstand

    If breite2 < breite Then
        zoomfa = breite2 / breite * 100
        .Zoom = zoomfa
    End If

End With

End Sub

Den Rest mit der Windows Query kannst du entsorgen.
 
  • Gefällt mir
Reaktionen: Bermont
@Janush Danke dir, was genau von dem Code muss ich bei mir noch stehen lassen?

Das ganze wird beim Öffnen der Excel-Datei direkt dargestellt. Also man sieht dann direkt ein Benutzer Formular was in dem Fall ein Prüfprotokoll darstellt.

Private Sub UserForm_Activate()

'Bildschirm
mobreite = GetSystemMetrics(SM_CXSCREEN)
mohöhe = GetSystemMetrics(SM_CYSCREEN)

'Userform
breite = UserForm1.Width
höhe = UserForm1.Height
'Excel-Fenster
breite2 = Application.Width
höhe2 = Application.Height
ftop = Application.Top
fleft = Application.Left

randabstand = 7

UserForm1.StartUpPosition = 0
UserForm1.Left = fleft + randabstand
UserForm1.Top = ftop + randabstand
UserForm1.Width = breite2 - 2 * randabstand
UserForm1.Height = höhe2 - 2 * randabstand

If breite2 < breite Then
zoomfa = breite2 / breite * 100
UserForm1.Zoom = zoomfa
End If

'Zoomwert
' x = breite2 / breite * 100
' Y = höhe2 / höhe * 100
' If x < 100 And Y < 100 Then
' If x > Y Then
' UserForm1.Zoom = Y
' Else
' UserForm1.Zoom = x
' End If
' End If
 
Zuletzt bearbeitet:
Danke für deine Hilfe funktioniert soweit. Ist es noch möglich das er keinen Platz auf der linken und rechten Seite und nach unten zur Taskleiste hin lässt?
 
Im Code schreibst du das der Randabstand den Wert 7 beträgt. Wie kommt dieser zustande?
Dann hast du noch was mit StartUpPosition geschrieben. Gehe hier mal davon aus das ist die Angabe wo das Fenster ohne was einzustellen ausgerichtet ist. So wie ich das in Erinnerung habe, wird es oben Links an der Ecke ausgerichtet, richtig?
 
Ich habe den Code nicht geschrieben, der kam von dir. Ich habe ihn nur etwas angepasst und dir gesagt, was du weg lassen kannst.


Was sagt dir den dein Bauchgefühl was die folgenden Zeilen bewirken?

Code:
UserForm1.StartUpPosition = 0
UserForm1.Left = fleft + randabstand
UserForm1.Top = ftop + randabstand
UserForm1.Width = breite2 - 2 * randabstand
UserForm1.Height = höhe2 - 2 * randabstand

Sowas bekommt man mit ausprobieren super hin.

Startup lässt du einfach und beim rest nimmst du + rand und / oder - 2 * rand weg. Easy
 
  • Gefällt mir
Reaktionen: Bermont
Klar ausprobieren ist die andere Möglichkeit, was ich jetzt auch gemacht habe. Dachte eventuell das es ein Standard oder sowas ist . Deswegen habe ich dich direkt gefragt wenn ich schon jemanden habe der sich damit auskennt :) habe es jetzt hinbekommen. Hoffe nur das es auch an anderen Bildschirmen genauso dargestellt wird.
 
Zurück
Oben