Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA: Userform Minimieren Maximieren (Klassenmodul)

VBA: Userform Minimieren Maximieren (Klassenmodul)
Lombe
Hi Leute,
ich kenn mich mit Klassenmodule wenig aus und habe daher folgendes Problem.
Meine Userform hat neben dem Schließkreuz rechts oben nun auch die Minimeren und Maximieren Schaltflächen dank der Codes (siehe Quellenangaben) die u.a. im Klassenmodul stehen.
Frage:
Ich möchte nun, dass die Userform direkt nach dem Aufruf „maximal“ („Vergrößern“) und somit gleich Bildschirmfüllend erscheint.
Vereinfacht gesagt möchte ich per VBA die Maximieren Schaltfläche neben dem Schließkreuz nach dem Start betätigen.
Derzeit erscheint die Userform beim Start am Bildschirm im „Verkleinern“ Modus
und hat die Abmessungen der Eigenschaften (width, height).
https://www.herber.de/bbs/user/78382.xlsm
Hinweis:
Es reicht mir leider nicht die width und height Eigenschaft der Userform beim Start (Initialisieren) auf
Userform1.Height = Application.Height
Userform1.Width = Application.Width
zu stellen, denn dann ist die Userform ja immer noch nicht im Vergrößern“-Modus (komplett maximiert).
Zwischen „Verkleinern“ und „Vergrößern“ wäre zu dem auch kaum ein Unterschied zu erkennen (beides wäre annähernd Bildschirmgroß)
und ein „Ziehen“ der Userformränder mit der Maus wäre dann auch nicht mehr so einfach möglich…
Danke für jegliche Information!
Quellenangaben:
www.herber.de/forum/archiv/796to800/t799902.htm
www.vb-fun.de
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA: Userform Minimieren Maximieren (Klassenmodul)
13.01.2012 00:54:48
Nepumuk
Hallo,
im Modul des Userforms:
' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

Option Explicit

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
Private Declare Function SetWindowPlacement Lib "user32.dll" ( _
    ByVal hwnd As Long, _
    ByRef lpwndpl As WINDOWPLACEMENT) As Long
Private Declare Function GetWindowPlacement Lib "user32.dll" ( _
    ByVal hwnd As Long, _
    ByRef lpwndpl As WINDOWPLACEMENT) As Long

Private Type POINTAPI
    x As Long
    y As Long
End Type

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Type WINDOWPLACEMENT
    Length As Long
    flags As Long
    showCmd As Long
    ptMinPosition As POINTAPI
    ptMaxPosition As POINTAPI
    rcNormalPosition As RECT
End Type

Private m_objUserForm As clsUserForm
Private m_blnFormInit As Boolean

Private Const GC_CLASSNAMEMSUSERFORM = "ThunderDFrame"
Private Const SW_MAXIMIZE = 3

Private Sub UserForm_Activate()
    Dim lngHwnd As Long
    Dim udtWinEst As WINDOWPLACEMENT
    Set m_objUserForm = New clsUserForm
    Set m_objUserForm.Form = Me
    lngHwnd = FindWindow(GC_CLASSNAMEMSUSERFORM, Caption)
    Call GetWindowPlacement(lngHwnd, udtWinEst)
    udtWinEst.showCmd = SW_MAXIMIZE
    Call SetWindowPlacement(lngHwnd, udtWinEst)
End Sub

Alles andere in dem Modul kannst du löschen.
Gruß
Nepumuk
Anzeige
AW: VBA: Userform Minimieren Maximieren (Klassenmodul)
16.01.2012 10:32:41
Lombe
Hi Nepumuk,
super, das klappt so weit prima!
Es ergibt sich nun doch noch eine weitere Frage.
Ist es möglich, dass im verkleinern Modus, rechts und unten ein Scrollbalken (ScrollBarsBoth) in der Userform erscheinen,
diese Scrollbalken aber im maximierten Zustand (das ist der Normalzustand der Userform) wieder verschwinden?
Was muss im Code noch geändert werden?
Gruß
Lombe
Anzeige
AW: VBA: Userform Minimieren Maximieren (Klassenmodul)
16.01.2012 21:14:10
Nepumuk
Hallo,
im Modul des Userforms:
Private Sub UserForm_Resize()
    If Height >= ScrollHeight And Width >= ScrollWidth Then
        ScrollBars = fmScrollBarsNone
    ElseIf Height >= ScrollHeight And Width < ScrollWidth Then
        ScrollBars = fmScrollBarsHorizontal
    ElseIf Height < ScrollHeight And Width >= ScrollWidth Then
        ScrollBars = fmScrollBarsVertical
    Else
        ScrollBars = fmScrollBarsBoth
    End If
End Sub

Gruß
Nepumuk
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Userform in Excel VBA Maximieren und Minimieren


Schritt-für-Schritt-Anleitung

Um eine Userform in Excel VBA beim Start zu maximieren, kannst Du den folgenden Code in das Modul Deiner Userform einfügen. Stelle sicher, dass Du ein Klassenmodul für die Userform erstellt hast.

  1. Öffne den VBA-Editor (Alt + F11).
  2. Füge ein neues Klassenmodul hinzu (Rechtsklick auf "VBAProject" > "Einfügen" > "Klassenmodul").
  3. Benenne das Klassenmodul (z.B. clsUserForm).
  4. Füge den folgenden Code in das Klassenmodul ein:
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long

Private Declare Function SetWindowPlacement Lib "user32.dll" ( _
    ByVal hwnd As Long, _
    ByRef lpwndpl As WINDOWPLACEMENT) As Long

Private Declare Function GetWindowPlacement Lib "user32.dll" ( _
    ByVal hwnd As Long, _
    ByRef lpwndpl As WINDOWPLACEMENT) As Long

Private Type POINTAPI
    x As Long
    y As Long
End Type

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Type WINDOWPLACEMENT
    Length As Long
    flags As Long
    showCmd As Long
    ptMinPosition As POINTAPI
    ptMaxPosition As POINTAPI
    rcNormalPosition As RECT
End Type

Private m_objUserForm As clsUserForm

Private Sub UserForm_Activate()
    Dim lngHwnd As Long
    Dim udtWinEst As WINDOWPLACEMENT
    Set m_objUserForm = New clsUserForm
    Set m_objUserForm.Form = Me
    lngHwnd = FindWindow("ThunderDFrame", Caption)
    Call GetWindowPlacement(lngHwnd, udtWinEst)
    udtWinEst.showCmd = 3 ' SW_MAXIMIZE
    Call SetWindowPlacement(lngHwnd, udtWinEst)
End Sub
  1. Füge den Code in das Userform-Modul ein, um die Scrollbalken zu steuern:
Private Sub UserForm_Resize()
    If Height >= ScrollHeight And Width >= ScrollWidth Then
        ScrollBars = fmScrollBarsNone
    ElseIf Height >= ScrollHeight And Width < ScrollWidth Then
        ScrollBars = fmScrollBarsHorizontal
    ElseIf Height < ScrollHeight And Width >= ScrollWidth Then
        ScrollBars = fmScrollBarsVertical
    Else
        ScrollBars = fmScrollBarsBoth
    End If
End Sub
  1. Teste die Userform, indem Du sie im VBA-Editor startest.

Häufige Fehler und Lösungen

  • Fehler: Userform wird nicht maximiert.

    • Stelle sicher, dass der Code im UserForm_Activate() korrekt eingefügt ist.
  • Fehler: Scrollbalken erscheinen nicht.

    • Überprüfe, ob der Code in der UserForm_Resize() korrekt implementiert ist.

Alternative Methoden

Eine alternative Methode, um eine Userform zu maximieren, besteht darin, die Width und Height Eigenschaft direkt anzupassen:

UserForm1.Height = Application.Height
UserForm1.Width = Application.Width

Diese Methode garantiert jedoch nicht, dass die Userform im maximierten Zustand bleibt.


Praktische Beispiele

Hier ist ein praktisches Beispiel, wie Du die Userform maximieren und Scrollbalken verwalten kannst. Diese Codes sind nützlich für komplexe Benutzeroberflächen, die viel Platz benötigen.

Private Sub UserForm_Activate()
    ' Maximieren der Userform
    ...
End Sub

Private Sub UserForm_Resize()
    ' Scrollbalken anpassen
    ...
End Sub

Nutze diese Beispiele als Grundlage für Deine eigenen Projekte.


Tipps für Profis

  • Verwende Option Explicit am Anfang jedes Moduls, um sicherzustellen, dass alle Variablen deklariert sind.
  • Halte Deine Userform-Layouts einfach und übersichtlich.
  • Experimentiere mit verschiedenen Steuerelementen, um die Benutzerfreundlichkeit zu erhöhen.

FAQ: Häufige Fragen

1. Wie kann ich die Userform bei jedem Start maximieren? Um die Userform immer maximiert zu starten, füge den Code in die UserForm_Activate() Sub ein.

2. Kann ich die Scrollbalken anpassen, ohne die Userform zu maximieren? Ja, Du kannst die Scrollbalken in der UserForm_Resize() Sub anpassen, unabhängig von der Maximalgröße der Userform.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige