Office: UserForm im Vordergrund halten wenn application visible=false

Helfe beim Thema UserForm im Vordergrund halten wenn application visible=false in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, Ich habe für meine Kollegen eine kleine Anwendung gebaut, in der über ein Formular Daten eingeben und gespeichert werden können. Wenn die UF... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von ChristophKA, 30. Juni 2010.

  1. UserForm im Vordergrund halten wenn application visible=false


    Hallo,

    Ich habe für meine Kollegen eine kleine Anwendung gebaut, in der über ein Formular Daten eingeben und gespeichert werden können.

    Wenn die UF initialisiert wird, wird dabei Excell mit: "Application.visible = false" ausgeblendet.

    Beim schließen der UF wird, wenn noch andere Arbeitsmappen geöffnet sind, nur meine Arbeitsmappe geschlossen und die visible-Eigenschaft wieder auf "true" gesetzt, um die geöffneten anderen Mappen anzuzeigen.
    Ansonsten wird mit dem Schließen der UF auch Exzell beendet.

    Funktioniert soweit alles ganz gut.

    Problem: Wenn andere Anwendungen im Vollbildmodus geöffnet sind kann es passieren, dass meine UF bei Klick auf eine andere Anwendung hinter dieser verschwindet und so weder bearbeitet noch beendet werden kann (ausser über Taskmanger mit Beenden des Excell-Exe-Prozess).

    Wer hat eine gute Lösung?

    Gruß, Christoph

    :)
     
    ChristophKA, 30. Juni 2010
    #1
  2. Danke für den Tip!

    Wenn ich den Hinweis richtig verstehe, ist das eine Notoperation per extra Formular, um das verlorene Fenster zu finden und in den Vordergrund zu holen.

    Ich bräuchte aber eine Lösung dafür, dass das Formular in jedem Fall bis zum Beenden im Vordergrund bleibt und erst gar nicht verschwinden kann. Ich kann den Anwendern ja nicht zumuten in Panik zu geraten, wenn das Formular verschwindet.

    Für weitere Hilfe wäre ich sehr dankbar.

    Gruß, Christoph
     
    ChristophKA, 2. Juli 2010
    #3
  3. UserForm im Vordergrund halten wenn application visible=false

    Hallo,

    so:

    Option Explicit

    Private Declare Function SetWindowPos Lib "user32.dll" ( _
    ByVal hwnd As Long, _
    ByVal hWndInsertAfter As Long, _
    ByVal x As Long, _
    ByVal y As Long, _
    ByVal cx As Long, _
    ByVal cy As Long, _
    ByVal wFlags 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 HWND_TOPMOST = -1
    Private Const SWP_NOSIZE = &H1
    Private Const SWP_NOMOVE = &H2
    Private Const GC_CLASSNAMEUSERFORM = "ThunderDFrame"

    Private Sub UserForm_Activate()
    Call SetWindowPos(FindWindow(GC_CLASSNAMEUSERFORM, Caption), _
    HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
    End Sub
     
    Nepumuk, 2. Juli 2010
    #4
  4. Ja, genau! Funktioniert klasse. Vielen Dank für den Code. Ich werde mich damit noch beschäftigen müssen, bis ich ihn auch verstanden habe.

    Gruß, Christoph
     
    ChristophKA, 2. Juli 2010
    #5
  5. el_gor Neuer User
    Hallo ... auch ich versuchte den Code anzuwenden ... dieser funktioniert aber offenbar nur bei einer 32 bit Version ... wie kann dieser umgebaut werden, dass er auch bei einem 64 bit Rechner verwendet werden kann?

    Danke und lieben Gruß, Elmar
     
    el_gor, 29. Mai 2021
    #6
  6. Exl121150 Erfahrener User
    Hallo,

    ich nehme an, der VBA-Code müsste wie folgt modifiziert werden:
    Code:
    Option Explicit
    
    #If VBA7 Then
       Private Declare PtrSafe Function SetWindowPos Lib "user32.dll" ( _
            ByVal hwnd As LongPtr, _
            ByVal hWndInsertAfter As LongPtr, _
            ByVal x As Long, _
            ByVal y As Long, _
            ByVal cx As Long, _
            ByVal cy As Long, _
            ByVal wFlags As Long) As Long
          
       Private Declare PtrSafe Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
            ByVal lpClassName As String, _
            ByVal lpWindowName As String) As LongPtr
    #Else
       Private Declare PtrSafe Function SetWindowPos Lib "user32.dll" ( _
            ByVal hwnd As Long, _
            ByVal hWndInsertAfter As Long, _
            ByVal x As Long, _
            ByVal y As Long, _
            ByVal cx As Long, _
            ByVal cy As Long, _
            ByVal wFlags As Long) As Long
          
       Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
            ByVal lpClassName As String, _
            ByVal lpWindowName As String) As Long
    #End If
    
    Private Const HWND_TOPMOST = -1
    Private Const SWP_NOSIZE = &H1
    Private Const SWP_NOMOVE = &H2
    Private Const GC_CLASSNAMEUSERFORM = "ThunderDFrame"
    
    Public Sub UserForm_Activate()
        Call SetWindowPos(FindWindow(GC_CLASSNAMEUSERFORM, Caption), _
            HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
    End Sub
    
    Folgende Anweisungen
    #If VBA7 then
    ....
    #Else
    ....
    #End If

    sind Anweisungen für eine bedingte Kompilation: Wenn die Konstante VBA7 wahr (ab Office2010, vorher war VBA6) ist, wird nur der erste Abschnitt bis zum #Else kompiliert und der Rest zwischen #Else und #End If als Kommentar übergangen; ist jedoch VBA6 wahr (also vor Office2010), ist es genau umgekehrt.

    Im VBA7-Abschnitt kommt jetzt 2x das Schlüsselwort "PtrSafe" vor und 3x der Datentyp "LongPtr" anstelle von "Long".
    Dabei bedeutet "LongPtr", dass unter einem 64bit-Windows, ein 64bit-Zeiger eingesetzt wird vom VBA-Compiler, unter einem 32bit-Windows jedoch wie seit eh und je ein 32bit-Zeiger. Betroffen davon sind nur die Zeiger, nicht jedoch sonstige Long-Variablen - diese bleiben bei ihren 32bit.

    Den obigen VBA-Code musst du in das Codemodul der Userform kopieren. Wie weit er dann das gewünschte Ergebnis liefert, wenn das Activate-Ereignis der UserForm ausgelöst wird, kann ich nicht beurteilen - ich habe ihn nur flüchtig überprüft, ob er nicht abstürzt.

    All diese Details kannst du im folgenden Link nachlesen:
    Windows API-Deklarationen in VBA für 64-bit - Codekabinett
     
    Exl121150, 29. Mai 2021
    #7
  7. el_gor Neuer User

    UserForm im Vordergrund halten wenn application visible=false

    Hallo Anton

    und herzlichen Dank für deine Mühe ... dein Code hat funktioniert, allerdings das gewünschte Ergebnis ist ausgeblieben, aber vielleicht habe ich das ohnehin mißverstanden und im falschen Forumsbeitrag deponiert.

    Was ich erreichen wollte ist, dass beim Start lediglich die UserForm aufgerufen wird, Excel selbst dabei aber unsichtbar bleibt. Ich habe es schon versucht, aber mit dem Effekt, dass die UserForm wohl ohne Excel startet, aber wenn bereits andere Fenster offen sind, befindet sich das User_Form_Fenster im Hintergrund und es muss erst danach gesucht werden.

    Ich habe dies bisher so gelöst:

    Private Sub Workbook_Open()
    Application.ScreenUpdating = False
    Application.WindowState = xlMinimized
    Application.Visible = False
    Call UserForm ...

    Ich bin totaler Anfänger im VBA-Bereich. Sicher gibt es für meine Lösung elegantere Methoden. Wäre für weitere Ideen dankbar.

    Liebe Grüße, Elmar
     
    el_gor, 29. Mai 2021
    #8
  8. el_gor Neuer User
    Hallo ... nun bin ich auf diesen Code gestoßen ... mit dem konnte ich mein Problem lösen:
     
    el_gor, 3. Juni 2021
    #9
Thema:

UserForm im Vordergrund halten wenn application visible=false

Die Seite wird geladen...
  1. UserForm im Vordergrund halten wenn application visible=false - Similar Threads - UserForm Vordergrund halten

  2. Mehrfache Auswahl mit FileDialog

    in Microsoft Excel Hilfe
    Mehrfache Auswahl mit FileDialog: Hallo zusammen, Ich bin blutiger Anfänger in VBA, muss mich aber irgendwie durch ein betriebliches Problem durchwurschteln. Das klappt ganz gut bis ich jetzt hierdrauf gestossen bin: In einem...
  3. Änderung in UserForm Code ausführen

    in Microsoft Excel Hilfe
    Änderung in UserForm Code ausführen: Guten Abend Ich versuche seit Stunden eine Lösung für mein Problem zu finden. Ich habe auf meiner UserForm TextBoxen, CheckBoxen, ToggelButtons, ComboBoxen und CommandButtons. Nun möchte ich...
  4. lernfähige Auswahlliste (UserForm)

    in Microsoft Excel Hilfe
    lernfähige Auswahlliste (UserForm): Hallo Profis, ich habe eine Lösung für eine Auswahlliste mit UserForm gefunden und angepasst. Die UserForm wird durch Rechtsklick in Tabelle1 Spalte D ausgelöst. Dort werden mir Einträge aus dem...
  5. Userform mit Filtern

    in Microsoft Excel Hilfe
    Userform mit Filtern: Hallo zusammen, ich arbeite gerade an einem Bestellformular. Die Ausgangsdatei ist angehangen. Ich hänge gerade ein bisschen an einer Stelle, wo ich Eure Hilfe benötigen würde :-) Ich möchte in...
  6. Userform dauerhaft im Vordergrund

    in Microsoft Excel Hilfe
    Userform dauerhaft im Vordergrund: Hallo Mitstreiter, gibt es eine Möglichkeit, eine kleine Userform, dauerhaft im Vordergrund auf dem Desktop zu halten, selbst wenn eine andere Anwendung aktiviert ist? 327462
  7. Userform immer im Vordergrund

    in Microsoft Excel Hilfe
    Userform immer im Vordergrund: Hallo Experten Wie kann ich es in VBA schaffen das ich eine User Form immer im Vordergrund habe auch wenn ich andere Tabellen öffne das diese sichtlich ist ? wer könnte mir helfen ? L.G. Supi 351089
  8. Word Dokument über Excel-Userform im Vordergrund öffnen

    in Microsoft Excel Hilfe
    Word Dokument über Excel-Userform im Vordergrund öffnen: Ein freundliches Hallo an Alle, ich möchte über eine Userform in Excel ein Worddokument öffnen. Es soll vor Excel geöffnet werden, nicht in der Taskleiste abgelegt werden. Hier aus dem Forum und...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden