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

UserForm Minimieren Maximieren

Forumthread: UserForm Minimieren Maximieren

UserForm Minimieren Maximieren
15.02.2018 07:29:12
Alba
Hallo zusammen
ich versuche einen Code einzufügen um die UserForm zu Minimieren Maximieren

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

Meine UserForm heißt "ZfP_Protokolle" ich habe schon alles versucht überall wo UserForm steht _
in "ZfP_Protokolle" umzuändern bekomme aber immer den fehler: "Fehler beim Kompilieren: _
Benutzerdefinierter Typ nicht definiert" immer in dieser Zeile

m_objUserForm As clsUserForm

Danke im Voraus an alle Helfer :-)
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: UserForm Minimieren Maximieren
15.02.2018 07:47:06
Burak
Muss es denn Minimieren und Maximieren sein? reicht UserForm.Show und .Hide nicht?
Bin auch der Meinung …
15.02.2018 08:34:05
RPP63
… die Finger von APIs zu lassen, wenn man kaum Kenntnisse hat.
Anyway: Klassennamen zu ändern, ist nicht nur fahrlässig, sondern schlicht falsch!
Gruß Ralf
Teile die Meinungen, hier mein Senf dazu
15.02.2018 08:58:09
Peter(silie)
Hallo,
erstmal sage ich: Lass die Finger davon, dass wird ein Schlachtfeld.
Wenn es wirklich so wichtig ist, dass die UF minimierbar ist,
dann erstelle eine App in Visual Basic .Net oder C# .Net
Dort gibt es WPFs und Windows Forms.
Die kannst du minimieren, maximieren und du kannst die Controls
gescheit skalieren.
Du solltest dir im klaren sein, dass es für 32bit und 64bit Systeme verschiedene
API Funktionen gibt.
Eine 32bit Function in einer 64bit Umgebung lässt dein Office Programm abstürzen.
Wenn du es trotzdem weiter versuchen willst, hier ein paar nützliches sachen:
64bit Office benutzt VBA7, 32bit aber nicht!
Du musst also vorher auch folgendes machen:
#If VBA7 Then
' API function to locate a window.
Declare PtrSafe Function FindWindow Lib "user32" _
Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As LongPtr
' API function to retrieve a window's dimensions.
Declare PtrSafe Function GetWindowRect Lib "user32" ( _
ByVal hwnd As LongPtr, _
lpRect As RECT) As Long
#Else
' API function to locate a window.
Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
' API function to retrieve a window's dimensions.
Declare Function GetWindowRect Lib "user32" ( _
ByVal hwnd As Long, _
lpRect As RECT) As Long
#End If
Hier ein Link zu 64bit Funktionen die es in 32bit nicht gibt:
https://msdn.microsoft.com/en-us/library/aa383663(VS.85).aspx
Hier eine Liste mit Functions nach Release Date:
https://msdn.microsoft.com/en-us/library/aa383687(VS.85).aspx
Hier ein Microsoft Add-In dass die Kompabilität deines Codes prüft:
https://technet.microsoft.com/en-us/library/ee833946(office.14).aspx
Anzeige
AW: UserForm Minimieren Maximieren
15.02.2018 12:05:56
Mullit
Hallo,
und zu guter Letzt besagt der Fehler zunächst mal, daß Du auch ein Klassenmodul mit dem Namen clsUserForm anlegen mußt, wie in diesem Bsp...
http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/tipps/tip0164.shtml
Gruß, Mullit
Anzeige
AW: UserForm Minimieren Maximieren
16.02.2018 07:06:40
Alba
Hallo zusammen
also mit dem Klassenmodul "clsUserForm" hat es geklappt und bis jetzt kein Ärger.
Hab eure Warnungen aber erst genommen und zur Sicherheit eine Sicherungskopie der Datei gemacht :-)
;
Anzeige

Infobox / Tutorial

UserForm in Excel Minimieren und Maximieren


Schritt-für-Schritt-Anleitung

Um eine UserForm in Excel zu minimieren und maximieren, benötigst Du den folgenden VBA-Code. Dieser Code verwendet API-Funktionen, um die UserForm zu steuern. Stelle sicher, dass Du ein Klassenmodul mit dem Namen clsUserForm erstellt hast.

  1. Öffne den VBA-Editor (Alt + F11).
  2. Füge ein neues Klassenmodul hinzu und nenne es clsUserForm.
  3. Kopiere und füge den folgenden Code in das Modul ein:
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
  1. Ändere Caption in den Namen Deiner UserForm, z.B. ZfP_Protokolle.
  2. Schließe den VBA-Editor und teste die UserForm.

Häufige Fehler und Lösungen

Ein häufiger Fehler, den Du möglicherweise siehst, ist:

"Fehler beim Kompilieren: Benutzerdefinierter Typ nicht definiert"

  • Lösung: Stelle sicher, dass Du das Klassenmodul clsUserForm angelegt hast. Dieser Fehler tritt auf, wenn der Typ nicht definiert ist, weil das Modul fehlt.

Ein weiterer Fehler könnte sein:

"Kompatibilitätsprobleme zwischen 32-Bit und 64-Bit"

  • Lösung: Verwende die PtrSafe-Deklarationen, wenn Du 64-Bit Office nutzt. Beispiel:
#If VBA7 Then
    Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As LongPtr
#Else
    Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
#End If

Alternative Methoden

Falls Du die UserForm nicht minimieren und maximieren möchtest, kannst Du einfach die Methoden UserForm.Show und UserForm.Hide verwenden. Diese sind einfacher und benötigen keinen API-Zugriff.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie Du eine UserForm minimieren kannst:

Private Sub btnMinimize_Click()
    Me.Hide ' Die UserForm wird ausgeblendet
End Sub

Um die UserForm wieder anzuzeigen, kannst Du eine Schaltfläche verwenden, die UserForm.Show aufruft.


Tipps für Profis

  • Wenn Du mit API-Funktionen arbeitest, mache immer Sicherungskopien Deiner Arbeitsmappen, um Datenverluste zu vermeiden.
  • Achte darauf, ob Du in einer 32-Bit oder 64-Bit Umgebung arbeitest, um Komplikationen zu vermeiden.
  • Verwende die integrierten Entwicklungswerkzeuge in Excel, um Fehler leichter zu finden und zu korrigieren.

FAQ: Häufige Fragen

1. Muss ich unbedingt API-Funktionen verwenden?
Nein, Du kannst auch einfach die Methoden UserForm.Show und UserForm.Hide verwenden, wenn Du keine speziellen Funktionen wie Minimieren und Maximieren benötigst.

2. Was ist ein Klassenmodul?
Ein Klassenmodul in VBA ist ein Modul, das eine benutzerdefinierte Klasse definiert, die Eigenschaften und Methoden haben kann, ähnlich wie Objekte in anderen Programmiersprachen.

3. Wo finde ich Hilfe zu API-Funktionen?
Du kannst die Microsoft-Dokumentation besuchen oder in Foren nach spezifischen API-Funktionen suchen, um mehr über deren Nutzung und Syntax zu erfahren.

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