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

Forumthread: Userform Grösse ändern

Userform Grösse ändern
Kai
Hallo,
ich habe eine UserForm, auf der sitzen ein paar Steuerlemente drauf, (Listboc, Textfeld und Combobox)
Nun möchte ich folgendes erreichen: ich möchte die Userform, da der Code auf verschiedenen Rechnern mit verschiedenen Aüflösungen läuft, mit der Maus größer und kleiner machen können. Das heißt, die Userform soll in der Breite so bleiben wie sie ist, (wird mittig geöffnet) aber ich möchte die Userform in der Höhe verstellen können (also im laufenden Betrieb mit der Maus an der unteren Kante nach unten ziehen)
Was muss ich denn an der userform ändern, damit dies möglich ist. Momentan erscheint garnicht das entsprechende Symbol (Pfleil) wenn ich mit der Maus über die untere Kante fahre.
Wenn ich die Userform größer ziehe, dann würde wahrscheinlich unten eine leere graue Fläche entstehen. Diese freie Fläche, soll der Listbox, die in der Mitte der Userform ist, zur Verfügung gestellt werden.
Also, so, dass ich die Grösse der Listbox nicht fix angebe, sondern die Höhe von der unterne Kante der Userform abhängig mache.
Wie programmiert man das denn per Code ?
Danke mal
Kai
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Userform Grösse ändern
18.01.2011 11:34:57
Nepumuk
Hallo,
In das Klassenmodul des Userforms:
Option Explicit

Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" ( _
    ByVal hwnd As Long, _
    ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" ( _
    ByVal hwnd As Long, _
    ByVal nIndex As Long) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long

Private Const GWL_STYLE = -16&
Private Const WS_THICKFRAME = &H40000

Private msngWidth As Single, msngHeightDifference As Single

Private Sub UserForm_Initialize()
    Dim lngHWnd As Long, lngStyle As Long
    msngWidth = Width
    msngHeightDifference = Height - ListBox1.Height
    lngHWnd = FindWindow("ThunderDFrame", Caption)
    lngStyle = GetWindowLong(lngHWnd, GWL_STYLE)
    Call SetWindowLong(lngHWnd, GWL_STYLE, lngStyle Or WS_THICKFRAME)
End Sub

Private Sub UserForm_Layout()
    Width = msngWidth
    ListBox1.Height = Height - msngHeightDifference
End Sub
Gruß
Nepumuk
Anzeige
AW: Userform Grösse ändern
18.01.2011 11:54:35
Kai
Hi Nepumuk,
wie meinst Du, einfach ein Klassenmodul einfügen
(MODULE - rechte Maustaste - EINFÜGEN - KLASSENMODUL)
und alles reinkopieren , oder muss ich das irgend wie mit der UserForm verankern ?
Danke
Kai
AW: Userform Grösse ändern
18.01.2011 11:57:33
Rudi
Hallo,
einfach in das Modul des Userforms.
Änderung, falls jemand die UF zu stark verkleinert:
Private Sub UserForm_Layout()
Width = msngWidth
ListBox1.Height = Application.Max(1, Height - msngHeightDifference)
End Sub

Gruß
Rudi
Anzeige
AW: Userform Grösse ändern
18.01.2011 17:56:53
Nepumuk
Hallo,
NEEE. Das Userform ist doch ein Objekt (wir Programmierer sagen aber Klasse dazu, damit uns die Laien nicht verstehen.) Manche Objekte haben ihr eignes Modul. So wie das Userform, Tabellen, Diagrammblätter und das Workbook. Und weil wir zu Objekten Klassen sagen, sind die dazugehörigen Module eben Klassenmodule. :-)
Gruß
Nepumuk
Anzeige
AW: Userform Grösse ändern
18.01.2011 11:52:11
Reinhard
Hallo Kai,
nimm doch eine Scrollbar.
Private Sub UserForm_Initialize()
UserForm1.Height = 350
ListBox1.Height = 150
ScrollBar1.Value = 50
ScrollBar1.Top = 200
End Sub
Private Sub ScrollBar1_Change()
ListBox1.Height = 100 + ScrollBar1.Value
UserForm1.Height = 300 + ScrollBar1.Value
ScrollBar1.Top = 150 + ScrollBar1.Value
End Sub

Gruß
Reinhard
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Userform Größe in Excel VBA anpassen


Schritt-für-Schritt-Anleitung

Um die Größe einer UserForm in Excel VBA dynamisch anzupassen, kannst Du folgende Schritte befolgen:

  1. Öffne das Visual Basic for Applications (VBA) Editor:

    • Drücke ALT + F11, um den Editor zu starten.
  2. Füge ein Klassenmodul hinzu:

    • Klicke im Projektfenster mit der rechten Maustaste auf den Namen Deiner UserForm.
    • Wähle Einfügen > Klassenmodul.
  3. Füge den folgenden Code in das Klassenmodul ein:

    Option Explicit
    
    Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" ( _
       ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" ( _
       ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
       ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    
    Private Const GWL_STYLE = -16
    Private Const WS_THICKFRAME = &H40000
    
    Private msngWidth As Single, msngHeightDifference As Single
    
    Private Sub UserForm_Initialize()
       Dim lngHWnd As Long, lngStyle As Long
       msngWidth = Width
       msngHeightDifference = Height - ListBox1.Height
       lngHWnd = FindWindow("ThunderDFrame", Caption)
       lngStyle = GetWindowLong(lngHWnd, GWL_STYLE)
       Call SetWindowLong(lngHWnd, GWL_STYLE, lngStyle Or WS_THICKFRAME)
    End Sub
    
    Private Sub UserForm_Layout()
       Width = msngWidth
       ListBox1.Height = Height - msngHeightDifference
    End Sub
  4. Füge den Layout-Code in die UserForm ein:

    • Übernehme den Code aus dem Klassenmodul in die UserForm, um die Höhe der ListBox automatisch anzupassen, wenn die UserForm resized wird.

Häufige Fehler und Lösungen

  • Problem: Das Resize-Symbol erscheint nicht, wenn ich mit der Maus über die untere Kante fahre.

    • Lösung: Stelle sicher, dass der Code für SetWindowLong korrekt implementiert ist und das WS_THICKFRAME-Flag gesetzt wurde.
  • Problem: Die ListBox bleibt in der Höhe unverändert, wenn ich die UserForm resize.

    • Lösung: Überprüfe den Code im UserForm_Layout, um sicherzustellen, dass die Berechnung der ListBox-Höhe korrekt ist.

Alternative Methoden

Eine alternative Methode zur Anpassung der UserForm-Größe ist die Verwendung von Scrollbars. Du kannst eine Scrollbar hinzufügen und den Code wie folgt anpassen:

Private Sub UserForm_Initialize()
    UserForm1.Height = 350
    ListBox1.Height = 150
    ScrollBar1.Value = 50
    ScrollBar1.Top = 200
End Sub

Private Sub ScrollBar1_Change()
    ListBox1.Height = 100 + ScrollBar1.Value
    UserForm1.Height = 300 + ScrollBar1.Value
    ScrollBar1.Top = 150 + ScrollBar1.Value
End Sub

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie Du eine UserForm mit einer ListBox und einer Scrollbar erstellen kannst, die die Größe automatisch anpasst:

  1. Erstelle eine UserForm mit einer ListBox und einer Scrollbar.
  2. Füge den oben genannten Code in die UserForm und die Scrollbar ein.
  3. Testen: Starte die UserForm und passe die Größe an, um zu sehen, wie die ListBox dynamisch reagiert.

Tipps für Profis

  • VBA Userform Größe fixieren: Wenn Du die Höhe der UserForm fixieren möchtest, kannst Du im UserForm_Layout die Höhe konstant setzen.
  • Debugging: Nutze Debug.Print um die Werte von Width und Height zu prüfen, wenn Du auf Fehler stößt.
  • Userform Größe automatisch anpassen: Achte darauf, dass Du immer die richtige Berechnung für die ListBox-Höhe vornimmst, um eine optimale Benutzererfahrung zu gewährleisten.

FAQ: Häufige Fragen

1. Wie kann ich die Breite der UserForm fixieren? Du kannst die Breite der UserForm im UserForm_Initialize festlegst und im UserForm_Layout unverändert lassen.

2. Funktioniert das auch in älteren Excel-Versionen? Ja, der VBA-Code zur Anpassung der UserForm-Größe sollte in den meisten Excel-Versionen funktionieren, die VBA unterstützen. Achte darauf, dass Du die richtige Syntax verwendest.

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