Anzeige
Archiv - Navigation
1416to1420
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

Excel minimiert lassen während UserForm aktiv

Excel minimiert lassen während UserForm aktiv
27.03.2015 13:10:07
Stephan
Hallo zusammen,
gibt ja einige schöne Lösungen hier, jetzt hoffe ich mal es gibt auch eine für meine Herausforderung.
Ich starte durch ein Makro eine UserForm und minimiere Excel.
Wenn nun der Nutzer aber nun in ein anderes Programm wechselt und danach wieder zur UserForm will wird Excel wieder angezeigt.
Excel soll in diesem Fall aber minimiert bleiben und nur die UserForm anzeigen. Wie ist das bitte möglich?
Ich hab mich schon fast tot gegoogelt dazu und einiges ausprobiert.
Application.Visible = false ist ungünstig, da danach weder UserForm noch Excel in der Taskleiste erscheinen.
Bei ShowModal auf False kann man danach Excel wieder minimieren, die UserForm wird aber ebenfalls minimiert, bringt also nichts.
Ich hab versucht eine automatisches minimieren einzufügen wenn die UserForm aktiv wird, also _ sowas wie:

Private Sub UserForm_Activate()
Application.WindowState = xlMinimized
End Sub

Das funktioniert so aber auch nicht, Excel wird einfach nicht minimiert!
Hoffe inständig ihr könnt mir weiterhelfen!
Grüße

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel minimiert lassen während UserForm aktiv
27.03.2015 13:17:13
Michael
Hallo Stephan!
Schritt für Schritt hier: https://www.youtube.com/watch?v=3nlJuW0yK6U
LG und schönes Wochenende!
Michael

AW: Excel minimiert lassen während UserForm aktiv
27.03.2015 13:32:38
Stephan
Hey Michael,
nette Idee, hilft mir so leider aber nicht, da es sich dabei um das von mir schon erwähnte Application.Visible = false dreht!
Gruß Stephan

AW: Excel minimiert lassen während UserForm aktiv
27.03.2015 13:45:42
Daniel
Hi
Excel nicht minimieren, sondern Windowstate = xlnormal und dann Height und Width des Fenster so klein wie möglich setzt und an den Rand verschieben.
Gruß Daniel

AW: Excel minimiert lassen während UserForm aktiv
27.03.2015 14:05:36
Stephan
Hey,
mit etwas ähnlichem hatte ich auch schon experimentiert, das gab aber probleme wenn der WindowState auf xlMaximized stand. Die sich neu ergebende Kombination sieht nun folgender maßen aus:
Application.WindowState = xlNormal
Application.Top = Application.Top - 1000
zum wieder anzeigen dann:
Application.Top = Application.Top + 1000
das unschöne daran, wenn Excel vorher Maximiert war erscheint es nach dem schließen der Form dann als verkleinertes Fenster.
Ich hab auf die schnelle keine Idee gefunden wie ich das lösen könnte, habt ihr dazu noch ne schnelle Idee? :-)

Anzeige
AW: Excel minimiert lassen während UserForm aktiv
27.03.2015 14:09:15
Daniel
Hi
speichere dir doch einfach bevor du das Fenster verkleinerst, den WindowState, sowie den .Top, .Left, .Height und .Width-Wert des Fensters und setze sie beim Einblenden wieder auf diese Werte.
Gruß Daniel

AW: Excel minimiert lassen während UserForm aktiv
27.03.2015 14:50:48
Stephan
Nun denn:

Variablen.ExcelWindowState = 0
If Application.WindowState = xlMaximized Then
Variablen.ExcelWindowState = xlMaximized
Application.WindowState = xlNormal
End If
Application.Top = Application.Top - 1000
ProgrammStart.programmFortsetzung
Application.Top = Application.Top + 1000
If Variablen.ExcelWindowState = xlMaximized Then
Application.WindowState = xlMaximized
End If

Nur blöd wenn z.B. ein Laufzeitfehler auftritt, dann hängt das Fenster sonst irgendwo und man weiß erst mal nicht mehr wie man dran kommen soll! :-O

Anzeige
AW: Excel minimiert lassen während UserForm aktiv
27.03.2015 15:34:58
Daniel
Deswegen schiebt man das Fenster ja auch nicht irgendwo hin, sonden an den unteren Rand, so dass man zumindest den oberen Rand des Fensters noch sehen kann, damit man das es greifen und zurückholen kann.
um die Bildschirmhöhe zu ermitteln kann man einfach das Fenster kurz maximieren und dann die Höhe des Fensters abfragen.
Gruß Daniel

AW: Excel minimiert lassen während UserForm aktiv
27.03.2015 16:10:30
Nepumuk
Hallo,
ganz einfach so:
Option Explicit

Private Declare Function ShowWindow Lib "user32.dll" ( _
    ByVal hwnd As Long, _
    ByVal nCmdShow As Long) As Long
Private Declare Function FindWindowA Lib "user32.dll" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long

Private Const SW_SHOWNORMAL As Long = 1&
Private Const SW_SHOWMINIMIZED As Long = 2&
Private Const SW_SHOWMAXIMIZED As Long = 3&
Private Const GC_CLASSNAMEUSERFORM As String = "ThunderDFrame"

Private Sub UserForm_Activate()
    Dim lngFormHwnd As Long
    Call ShowWindow(Application.hwnd, SW_SHOWMINIMIZED)
    lngFormHwnd = FindWindowA(GC_CLASSNAMEUSERFORM, Caption)
    Call ShowWindow(lngFormHwnd, SW_SHOWNORMAL)
End Sub

Private Sub UserForm_Terminate()
    Call ShowWindow(Application.hwnd, SW_SHOWMAXIMIZED)
End Sub

Ab Excel 2010 32 und 64 Bit:
Option Explicit

Private Declare PtrSafe Function ShowWindow Lib "user32.dll" ( _
    ByVal hwnd As LongPtr, _
    ByVal nCmdShow As Long) As Long
Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As LongPtr

Private Const SW_SHOWNORMAL As Long = 1&
Private Const SW_SHOWMINIMIZED As Long = 2&
Private Const SW_SHOWMAXIMIZED As Long = 3&
Private Const GC_CLASSNAMEUSERFORM As String = "ThunderDFrame"

Private Sub UserForm_Activate()
    Dim lngptrFormHwnd As LongPtr
    Call ShowWindow(CLngPtr(Application.hwnd), SW_SHOWMINIMIZED)
    lngptrFormHwnd = FindWindowA(GC_CLASSNAMEUSERFORM, Caption)
    Call ShowWindow(lngptrFormHwnd, SW_SHOWNORMAL)
End Sub

Private Sub UserForm_Terminate()
    Call ShowWindow(CLngPtr(Application.hwnd), SW_SHOWMAXIMIZED)
End Sub

Gruß
Nepumuk

Anzeige
AW: Excel minimiert lassen während UserForm aktiv
27.03.2015 17:31:42
Nepumuk
Hallo,
Jetzt hab ich die Bedingungen genauer gelesen. :-\
Wie wäre es, wenn das UserForms in der Taskleiste erscheint wie ein normales Fenster?
Beispiel für Excel 2002-2007:
Option Explicit

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

Private Const GWL_EXSTYLE As Long = -20&
Private Const WS_EX_APPWINDOW As Long = &H40000
Private Const GC_CLASSNAMEUSERFORM As String = "ThunderDFrame"

Private Sub UserForm_Activate()
    Dim lngFormHwnd As Long, lngStyle As Long
    Application.Visible = False
    lngFormHwnd = FindWindowA(GC_CLASSNAMEUSERFORM, Caption)
    lngStyle = GetWindowLongA(lngFormHwnd, GWL_EXSTYLE)
    lngStyle = lngStyle Or WS_EX_APPWINDOW
    Call SetWindowLongA(lngFormHwnd, GWL_EXSTYLE, lngStyle)
    Call SetActiveWindow(Application.hwnd)
    Call SetActiveWindow(lngFormHwnd)
End Sub

Private Sub UserForm_Terminate()
    Application.Visible = True
End Sub

Für Excel ab 2010 32 und 64 Bit:
Option Explicit

Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function GetWindowLongA Lib "user32.dll" ( _
    ByVal hwnd As LongPtr, _
    ByVal nIndex As Long) As Long
Private Declare PtrSafe Function SetWindowLongA Lib "user32.dll" ( _
    ByVal hwnd As LongPtr, _
    ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long
Private Declare Function SetActiveWindow Lib "user32.dll" ( _
    ByVal hwnd As LongPtr) As Long

Private Const GWL_EXSTYLE As Long = -20&
Private Const WS_EX_APPWINDOW As Long = &H40000
Private Const GC_CLASSNAMEUSERFORM As String = "ThunderDFrame"

Private Sub UserForm_Activate()
    Dim lngptrFormHwnd As LongPtr
    Dim lngStyle As Long
    Application.Visible = False
    lngptrFormHwnd = FindWindowA(GC_CLASSNAMEUSERFORM, Caption)
    lngStyle = GetWindowLongA(lngptrFormHwnd, GWL_EXSTYLE)
    lngStyle = lngStyle Or WS_EX_APPWINDOW
    Call SetWindowLongA(lngptrFormHwnd, GWL_EXSTYLE, lngStyle)
    Call SetActiveWindow(CLngPtr(Application.hwnd))
    Call SetActiveWindow(lngptrFormHwnd)
End Sub

Private Sub UserForm_Terminate()
    Application.Visible = True
End Sub

Gruß
Nepumuk

Anzeige
AW: Excel minimiert lassen während UserForm aktiv
30.03.2015 14:55:48
Stephan
@Daniel
Ich will ja genau vermeiden, das etwas vom Excel noch sichtbar ist, das würde dann nämlich im entsprechenden Bereich auch immer etwas überdecken!
@Nepumuk
Danke für die Code vorschläge, ich hab die 2. Idee auch mal ausprobiert, allerdings erscheint bei mir die Form nicht in der Taskleiste.
Ich denke ich bleibe nun beim verschieben von Excel, das funktioniert gut und ich brauche auch keine API funktionen. :-)
Vielen Dank für eure Hilfe!!

AW: Excel minimiert lassen während UserForm aktiv
27.03.2015 13:51:40
Michael
Hallo Stephan!
Excel soll in diesem Fall aber minimiert bleiben und nur die UserForm anzeigen
Wer lesen kann ist klar im Vorteil - hab ich überlesen. In dem Fall bin ich aber überfragt. Stell Dich auf offen...
¯\_(ツ)_/¯
LG und schönes Wochenende!
Michael

Anzeige
Ah, Lösung schon da, wieder geschlossen owT
27.03.2015 13:52:48
Michael
@ Daniel: Clever!

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige