Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: UserForm an variable Bildschirmaufloesung anpassen

UserForm an variable Bildschirmaufloesung anpassen
05.10.2007 21:35:00
Thomas
Hallo an alle VBA-Profis,
ich bin momentan schier am verzweifeln...
Ich habe eine automatisierte Excel-Datei erstellt (Anwender arbeitet nur mit den Userforms, hat keinen Einblick "hinter die Kulissen", also sprich Excel-Tabellen). Ich habe die einzelnen Userforms ueber den Code

Private Sub UserForm_Initialize()
With Me
.Height = Application.Height
.Width = Application.Width
End With
End Sub


an meine Bildschirmaufloesung angepasst, d.h. die einzelne UserForm fuellt den kompletten Bildschirm aus! Nun habe ich aber, wie Ihr Euch sicher vorstellen koennt, folgendes Problem:
Sollte meine Datei an anderen Rechnern mit unterschiedlicher Aufloesung aufgemacht werden, fuellen die UserForms nicht mehr den kompletten Bildschirm aus!!!
Ich habe beim recherieren zwar folgenden Code gefunden (http://www.chf-online.de/vba/aufloesungswechsel.htm), komme jedoch mit diesem ueberhaupt nicht zurecht!!! Irgendwie kommen nur Fehlermeldungen...
Ich bin wirklich fuer jede Hilfe dankbar!!!
Gruesse
Thomas

Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UserForm an variable Bildschirmaufloesung anpa
05.10.2007 22:02:00
Ramses
Hallo
mal eine einfache Variante
Private Sub UserForm_Initialize()
    Application.WindowState = xlMaximized
    With Me
        .Height = Application.Height
        .Width = Application.Width
    End With
End Sub

Dein UF bezieht sich ja auf die Fenstergrösse von EXCEL, daher vorher die Applikation maximieren,... dann sollte das tun.
Gruss Rainer

Anzeige
AW: UserForm an variable Bildschirmaufloesung anpa
05.10.2007 22:45:09
Thomas
Hallo Rainer,
Dein Code maximiert zwar das Excel- Fenster auf volle Groesse (danke, das ist nicht mal so schlecht), hilft mir aber in meinem Fall leider nicht weiter, da, sobald ich meine Aufloesung (1024*768) aendere, die UserForm nicht mehr vollstaendig sichtbar ist (z.B. bei 800*600) oder sie nicht mehr den gesamten Bildschirm ausfuellt (z.B. bei 1280*1024)!!! Ich glaube, dass der von mir verwendete Code genau das machen wuerde, wonach ich suche...
Aber wie schon gesagt, irgendetwas funktioniert da nicht!?
Ich habe die Prozedur in einem Modul aufgefuehrt, danach rufe ich sie in den jeweiligen UserForms auf! So weit so gut! Sobald ich die UserForm jedoch laufen lassen will, bringt er mir die Meldung, dass die Variable "System" nicht definiert sei...
' Vergrößerungs-/Verkleinerungsfaktor der aktuellen Auflösung
' in Bezug auf die ursprünglche Auflösung
XFactor = System.HorizontalResolution / X_RESOLUTION
YFactor = System.VerticalResolution / Y_RESOLUTION
Thomas

Anzeige
AW: UserForm an variable Bildschirmaufloesung anpa
05.10.2007 22:54:00
Ramses
Hallo
"....die UserForm nicht mehr vollstaendig sichtbar ist ... "
Das kannst du auch mit dem Code nicht ändern, dazu müsstest du dann auch jedes Control in der Grösse und Position anpassen.
"...oder sie nicht mehr den gesamten Bildschirm ausfuellt (z.B. bei 1280*1024)!..."
Wenn EXCEL maximiert ist, dann wird auch deine UF entsprechend gross. Wenn es das nicht machen würde, würde mich das sehr wundern.
Gruss Rainer

Anzeige
AW: UserForm an variable Bildschirmaufloesung anpa
05.10.2007 23:05:02
Thomas
Nein, des haut eben nicht so ganz hin...
Ich wuerde diesen Code gerne verwenden, aber da scheiterts einfach an meinen VBA- Kenntnissen... Ich verstehe zwar die Prozedur, weiss aber leider nicht, wie ich diese Fehlermeldung wegkriege...(siehe vorherigen Beitrag von mir)!
Liebe Gruesse

Anzeige
AW: UserForm an variable Bildschirmaufloesung anpa
05.10.2007 23:26:00
K.Rola
Hallo Ramses,
Userforms haben ein Zoom-Ereignis, mit dem auch alle Controls gezoomt werden.
Gruß K.Rola

Anzeige
AW: UserForm an variable Bildschirmaufloesung anpa
06.10.2007 10:59:20
Ramses
Hallo
K.Rola,... das ist richtig.
Aber damit wird eben auch die Grösse des Controls verändert, nicht nur die Position, u.U. bis zur Unleserlichkeit je nach Grösse der Userform und Zoomfaktor.
Der zweite Nachteil ist, dass der Zoomfaktor eben nicht die Grösse der UF verändert.
Da kann es dann eben passieren, dass dann Controls schon bei einer 10% Vergrösserung über die Grenzen der UF hinaus verschoben werden, je nach Positionierung, und nicht mehr sichtbar sind.
Gruss Rainer

Anzeige
AW: UserForm an variable Bildschirmaufloesung anpa
06.10.2007 22:32:00
Herby
Hallo Thomas,
dein Problem ist doch:
' Vergrößerungs-/Verkleinerungsfaktor der aktuellen Auflösung
' in Bezug auf die ursprünglche Auflösung
XFactor = System.HorizontalResolution / X_RESOLUTION
YFactor = System.VerticalResolution / Y_RESOLUTION
dass in obigen Code die beiden Einträge:
System.HorizontalResolution
System.VerticalResolution
(auch bei mir) nicht gelesen werden können. Diese Einträge enhalten die akutelle Bildschirmauflösung.
Diese kann auch per API abgefragt werden und schon funktionierts.
Im allg. Modul
Declare Function GetSystemMetrics32 Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long
Public Const SM_CXSCREEN = 0
Public Const SM_CYSCREEN = 1
ergänzen und dann noch die beiden Zeilen anpassen:
XFactor = GetSystemMetrics32(SM_CXSCREEN) / X_RESOLUTION
YFactor = GetSystemMetrics32(SM_CYSCREEN) / Y_RESOLUTION
Viele Grüße
Herby

Anzeige
AW: UserForm an variable Bildschirmaufloesung anpa
08.10.2007 17:46:49
Thomas
Hallo Herby,
habs ausprobiert, hat aber keinerlei Wirkung! Er bringt mir zwar keine Fehlermeldung, aber sobald ich die Aufloesung umstelle, sind die Controls verrutscht und das Fenster teilweise (bei geringerer Aufloesung als urspruenglicher) sogar nicht mal max. Bildschirm! Ich bin wirklich kurz vorm durchdrehen...
Was kann ich nur machen?

Anzeige
AW: UserForm an variable Bildschirmaufloesung anpa
08.10.2007 20:43:21
Herby
Hallo Thomas,
probiers mal mit meiner Musterdatei. Ich selbst habe es jedoch immer nur mit einer Bildschirm-
auflösung probiert. Daher kann ich auch nicht garantieren, dass es funktioniert.
https://www.herber.de/bbs/user/46620.xls
Viele Grüße
Herby

Anzeige
AW: UserForm an variable Bildschirmaufloesung anpa
09.10.2007 20:48:00
Kalif
Hallo,
also:
@Herby: Ich hab deine Loesung probiert, die funktioniert aber leider net!
@Ramses, Hajo, K.Rola:
Habe jetzt mal folgende Codes zusammengefuegt, die ihr mir geschickt habt:
Fuer die UserForms:

Private Sub UserForm_Initialize()
Me.Zoom = GetSystemMetrics(SM_CXScreen) / X_Resolution * 100
Application.WindowState = xlMaximized
With Me
.Height = Application.Height
.Width = Application.Width
End With
End Sub



Private Sub UserForm_Zoom(Percent As Integer)
Me.Width = Me.Width * Percent / 100
Me.Height = Me.Height * Percent / 100
End Sub


Modul:
Option Explicit
Public Const X_Resolution = 1024
Public Const Y_Resolution = 768
Public Const SM_CXScreen = 0
Public Const SM_CYScreen = 1
Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Nun passiert folgendes: Wie ihr wisst, habe ich als Ursprungsaufloesung 1024*768 (x/y = 1,333)
Waehle ich Aufloesungen mit dem gleichen x/y - Faktor, passt alles perfekt! Die UserForms als auch ihre jeweiligen Controls passen sich wie bei meiner urspruenglichen Aufloesung an den Bildschirm an, so wie ich es mir vorstelle!!!
Sollte sich jedoch der x/y - Faktor aendern, habe ich das gleiche Problem wie zuvor!!!
Was koennte ich da anur machen? Ich seh langsam echt den Wald vor lauter Baeumen nicht mehr...
Bin fuer jede Hilfe dankbar!!!
Gruesse

Anzeige
AW: UserForm an variable Bildschirmaufloesung anpa
09.10.2007 21:52:00
K.Rola
Hallo,
wenn das Seitenverhältnis anders als 1:1,33 ist, also z.B. 1:1,25, kann das ohne geringe
Verzerrung nicht funktionieren.
Du musst das eben beim Design des Userforms berücksichtigen und das Userform im
ensprechenden Verhältnis skalieren und den Zoomfaktor auf die relevante Dimension
beschränken.
Gruß K.Rola

Anzeige
AW: UserForm an variable Bildschirmaufloesung anpa
09.10.2007 22:37:07
Kalif
Hi K.Rola,
verstehe ich Dich also richtig, dass ich die ganzen Controls nur so im UserForm ansetzen soll, dass sie mit jeder Aufloesung zu sehen sind? Was meinst Du mit "...das Userform im
ensprechenden Verhältnis skalieren und den Zoomfaktor auf die relevante Dimension
beschränken..."?
Herzlichen Dank fuer Deine Hilfe!!!
Gruesse
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

UserForm an variable Bildschirmauflösung anpassen


Schritt-für-Schritt-Anleitung

Um Deine Excel VBA UserForm an die Bildschirmgröße anzupassen, kannst Du folgenden Code verwenden. Dieser stellt sicher, dass die UserForm automatisch die Größe des Bildschirms berücksichtigt:

Private Sub UserForm_Initialize()
    Application.WindowState = xlMaximized
    With Me
        .Height = Application.Height
        .Width = Application.Width
    End With
End Sub
  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel.
  2. Füge den obigen Code in das Modul Deiner UserForm ein.
  3. Stelle sicher, dass alle Controls auf der UserForm in der richtigen Position sind, um die Anpassung zu ermöglichen.

Häufige Fehler und Lösungen

Problem: Die UserForm wird nicht vollständig angezeigt.

Lösung: Überprüfe, ob Du die Größe der Controls in der UserForm entsprechend anpasst. Es kann notwendig sein, die Controls manuell zu skalieren, wenn die Auflösung stark variiert.

Problem: Fehlermeldung „Variable 'System' nicht definiert“.

Lösung: Ersetze den Code mit API-Funktionen zur Abfrage der Bildschirmauflösung:

Declare Function GetSystemMetrics32 Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long
Public Const SM_CXSCREEN = 0
Public Const SM_CYSCREEN = 1

XFactor = GetSystemMetrics32(SM_CXSCREEN) / X_RESOLUTION
YFactor = GetSystemMetrics32(SM_CYSCREEN) / Y_RESOLUTION

Alternative Methoden

Wenn die oben genannte Methode nicht funktioniert, kannst Du die UserForm auch mit einem Zoom an die Bildschirmauflösung anpassen:

Private Sub UserForm_Zoom(Percent As Integer)
    Me.Width = Me.Width * Percent / 100
    Me.Height = Me.Height * Percent / 100
End Sub

Diese Methode kann helfen, die UserForm proportional zu skalieren, ohne dass sie verzerrt wird.


Praktische Beispiele

Hier ist ein Beispiel, wie Du die UserForm an verschiedene Bildschirmauflösungen anpassen kannst:

Private Sub UserForm_Initialize()
    Dim XFactor As Double
    Dim YFactor As Double

    XFactor = GetSystemMetrics32(SM_CXSCREEN) / 1024
    YFactor = GetSystemMetrics32(SM_CYSCREEN) / 768

    Me.Width = Me.Width * XFactor
    Me.Height = Me.Height * YFactor
End Sub

In diesem Beispiel wird die UserForm an eine Standardauflösung von 1024x768 angepasst. Achte darauf, die Werte entsprechend Deiner ursprünglichen Auflösung anzupassen.


Tipps für Profis

  • Achte darauf, die Positionen und Größen der Controls so zu wählen, dass sie bei Veränderungen der Bildschirmauflösung nicht über die Grenzen der UserForm hinausgehen.
  • Nutze die API-Funktion GetSystemMetrics, um die aktuelle Bildschirmauflösung dynamisch abzufragen.
  • Teste Deine UserForm auf verschiedenen Monitoren, um sicherzustellen, dass sie auf allen Bildschirmformaten korrekt dargestellt wird.

FAQ: Häufige Fragen

1. Wie kann ich die UserForm für verschiedene Bildschirmauflösungen anpassen? Du kannst die oben genannten API-Funktionen verwenden, um die Bildschirmauflösung abzufragen und die UserForm entsprechend zu skalieren.

2. Warum wird meine UserForm nicht richtig angezeigt? Das kann daran liegen, dass die Controls nicht entsprechend der neuen Größe der UserForm angepasst wurden. Stelle sicher, dass alle Elemente korrekt positioniert sind.

3. Welche Excel-Version benötige ich? Die beschriebenen Methoden funktionieren in Excel 2007 und höheren Versionen, solange VBA unterstützt wird.

4. Kann ich die UserForm auch ohne Programmierung anpassen? Nein, um die UserForm dynamisch an die Bildschirmgröße anzupassen, ist Programmierung in VBA notwendig.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige