Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1732to1736
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

Userform Zomen oder Bildschirmgrösse

Userform Zomen oder Bildschirmgrösse
19.01.2020 16:25:17
Johannes
Hallo Zusammen
Ich habe eine Arbeitsmappe mit 64 Tabellen und 60 Userformen gebaut. Alles läuft Super.
Jetzt meine Frage:
Gibt es eine Befehlsform womit ich die Userformen so ausrichte das diese den gesamten Bildschirm nutzen.
Ich habe verschiedene Rechner (Bildschirme) wo das selbe Programm laufen soll.
Wer kann mir Helfen?
Gruß
JoHa

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform Zomen oder Bildschirmgrösse
19.01.2020 16:58:05
Nepumuk
Hallo Johannes,
teste mal:
Option Explicit

Private Declare PtrSafe Function GetSystemMetrics Lib "user32.dll" ( _
    ByVal nIndex As Long) As Long
Private Declare PtrSafe Function GetDesktopWindow Lib "user32.dll" () As LongPtr
Private Declare PtrSafe Function GetDC Lib "user32.dll" ( _
    ByVal hwnd As LongPtr) As LongPtr
Private Declare PtrSafe Function ReleaseDC Lib "user32.dll" ( _
    ByVal hwnd As LongPtr, _
    ByVal hdc As LongPtr) As Long
Private Declare PtrSafe Function GetDeviceCaps Lib "gdi32.dll" ( _
    ByVal hdc As LongPtr, _
    ByVal nIndex As Long) As Long

Private Const SM_CXSCREEN As Long = 0
Private Const SM_CYSCREEN As Long = 1
Private Const LOGPIXELS_X As Long = 88&

Private Sub UserForm_Activate()
    
    Dim sngWidth As Single, sngHeight As Single
    Dim sngScreenResolution As Single
    
    sngScreenResolution = GetResolution
    
    sngWidth = Width
    sngHeight = Height
    
    Left = 0
    Top = 0
    
    Width = GetSystemMetrics(SM_CXSCREEN) * sngScreenResolution
    Height = GetSystemMetrics(SM_CYSCREEN) * sngScreenResolution
    
    Zoom = Fix(WorksheetFunction.Min(Width / sngWidth, Height / sngHeight) * 100)
    
End Sub

Private Function GetResolution() As Single
    
    Dim lngptrhWndDesk As LongPtr, lngptrhDCDesk As LongPtr
    Dim lnglogPix As Long
    
    lngptrhWndDesk = GetDesktopWindow()
    lngptrhDCDesk = GetDC(lngptrhWndDesk)
    
    lnglogPix = GetDeviceCaps(lngptrhDCDesk, LOGPIXELS_X)
    
    Call ReleaseDC(lngptrhWndDesk, lngptrhDCDesk)
    
    GetResolution = 72 / lnglogPix
    
End Function


Gruß
Nepumuk
Anzeige
AW: Userform Zomen oder Bildschirmgrösse
19.01.2020 17:14:45
Johannes
Hallo Nepumuk
Super...…
jedoch wird das Tabellenblatt rechts und links nicht ganz abgedeckt.
Gibts da noch Hilfe ?
Gruß Hans
AW: Userform Zomen oder Bildschirmgrösse
19.01.2020 17:17:28
Nepumuk
Hallo Johannes,
kann ich nicht nachvollziehen. Bei mir ist sie genauso groß wie der Bildschirm. Daher kann ich dir da nicht helfen.
Gruß
Nepumuk
AW: Userform Zomen oder Bildschirmgrösse
19.01.2020 17:26:02
Nepumuk
Hallo Johannes,
jetzt ist mir doch noch was eingefallen. Teste mal:
Option Explicit

Private Declare PtrSafe Function GetSystemMetrics Lib "user32.dll" ( _
    ByVal nIndex As Long) As Long
Private Declare PtrSafe Function GetDesktopWindow Lib "user32.dll" () As LongPtr
Private Declare PtrSafe Function GetDC Lib "user32.dll" ( _
    ByVal hwnd As LongPtr) As LongPtr
Private Declare PtrSafe Function ReleaseDC Lib "user32.dll" ( _
    ByVal hwnd As LongPtr, _
    ByVal hdc As LongPtr) As Long
Private Declare PtrSafe Function GetDeviceCaps Lib "gdi32.dll" ( _
    ByVal hdc As LongPtr, _
    ByVal nIndex As Long) As Long

Private Const SM_CXSCREEN As Long = 0&
Private Const SM_CYSCREEN As Long = 1&
Private Const LOGPIXELS_X As Long = 88&
Private Const LOGPIXELS_Y As Long = 90&

Private Sub CommandButton1_Click()
    Call Unload(Object:=Me)
End Sub

Private Sub UserForm_Activate()
    
    Dim sngWidth As Single, sngHeight As Single
    
    sngWidth = Width
    sngHeight = Height
    
    Left = 0
    Top = 0
    
    Width = GetSystemMetrics(SM_CXSCREEN) * GetResolution(LOGPIXELS_X)
    Height = GetSystemMetrics(SM_CYSCREEN) * GetResolution(LOGPIXELS_Y)
    
    Zoom = Fix(WorksheetFunction.Min(Width / sngWidth, Height / sngHeight) * 100)
    
End Sub

Private Function GetResolution(ByVal pvlngLogPixel As Long) As Single
    
    Dim lngptrhWndDesk As LongPtr, lngptrhDCDesk As LongPtr
    Dim lnglogPixel As Long
    
    lngptrhWndDesk = GetDesktopWindow()
    lngptrhDCDesk = GetDC(lngptrhWndDesk)
    
    lnglogPixel = GetDeviceCaps(lngptrhDCDesk, pvlngLogPixel)
    
    Call ReleaseDC(lngptrhWndDesk, lngptrhDCDesk)
    
    GetResolution = 72 / lnglogPixel
    
End Function

Gruß
Nepumuk
Anzeige
AW: Userform Zomen oder Bildschirmgrösse
19.01.2020 17:38:55
Johannes
Hallo Nepumuk
hab es getestet.
Gleiches Ergebnis.
Danke für Deine super Hilfe.
Gruß JoHa
AW: Userform Zomen oder Bildschirmgrösse
19.01.2020 17:59:25
Johannes
Hallo Hajo
Danke für die Hilfe.
Gruß JoHa
AW: Userform Zomen oder Bildschirmgrösse
20.01.2020 08:02:49
Daniel
Hi
Die Bildschirmgröße kann man auch ermitteln, in dem man einfach das Excelfenster maximiert und dann dessen breite und Höhe abfragt.
Gruß Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige