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

Forumthread: Ungebundene Userform immer im vordergrund

Ungebundene Userform immer im vordergrund
18.06.2008 00:16:17
stefan
Hallo
ich starte eine Userform bei der ich im Eigenschaftsfenster ShowModal auf False gestellt habe.
Excel minimier ich mit mit "Application.WindowState = xlMinimized" oder blende es mit "Application.Visible=False"
ganz aus.
Das funktioniert soweit, aber das Problem ist nun ,das die Userform von anderen Programmen(zb.IE oder SAP) verdeckt werden kann.Was muß ich eingeben damit die/das UserForm immer im Vordergrund bleibt?
Vielen dank schon mal im vorraus.
mfg stefan

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ungebundene Userform immer im vordergrund
18.06.2008 00:33:27
Johannes
Hallo Stefan,
Quelle: Nepumuk @office-loesung.de ... und fuer gut befunden. :-)

Option Explicit
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function SetWindowPos Lib "User32" ( _
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 Enum SWP_Flags
SWP_NOSIZE = &H1
SWP_NOMOVE = &H2
SWP_NOACTIVATE = &H10
SWP_SHOWWINDOW = &H40
End Enum
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Sub UserForm_Activate()
Call prcSetForeground
End Sub
Private Sub prcSetForeground()
SetWindowPos GetHandle, HWND_TOPMOST, 0&, 0&, 0&, 0&, _
SWP_NOSIZE Or SWP_NOMOVE Or SWP_NOACTIVATE Or SWP_SHOWWINDOW
End Sub
Private Sub prcSetBackground()
SetWindowPos GetHandle, HWND_NOTOPMOST, 0&, 0&, 0&, 0&, _
SWP_NOSIZE Or SWP_NOMOVE Or SWP_NOACTIVATE Or SWP_SHOWWINDOW
End Sub
Private Function GetHandle() As Long
Select Case Val(Application.Version)
Case 8 'Office 97
GetHandle = FindWindow("ThunderXFrame", Me.Caption)
Case Else 'ab Office 2000
GetHandle = FindWindow("ThunderDFrame", Me.Caption)
End Select
End Function


Anzeige
AW: Ungebundene Userform immer im vordergrund
18.06.2008 00:54:10
stefan
Hallo Johannes
danke für deine Mühe,aber es klappt nicht...wo muß ich den code reinschreiben /kopieren arbeitsblatt?tabellenblatt?modul? Ich hab leider kaum ahnung von VBA.
Danke im vorraus
mfg stefan

Beispiel
18.06.2008 00:59:00
Johannes
Hi Stefan,
hier eine Beispielmappe zusammengeschraubt:
https://www.herber.de/bbs/user/53176.xls
Gruesse,
Johannes

Anzeige
AW: Genial Johannes
18.06.2008 01:35:11
stefan
hab es hinbekommen,doppelklick auf die userform und dort eingfügt....DANKE!!!...
nur verstehe ich nicht warum mir der projekt-explorer diese ebene nicht anzeigt,klick ich auf tabellenblatt oder modul etc. bekomm ich die codes angezeigt... klick ich auf userform, seh ich erstmal nur diese, und erst nach einem doppelklick darauf seh ich den code.muß man da irgentwas einstellen das einem der code im projekt-explorer gleich angezeigt wird?
mfg stefan

Anzeige
AW: Genial Johannes
18.06.2008 01:47:08
Johannes
Hi Stefan,
na ja - das ist das normale Verhalten des VBA Editors. Dir wird zuerst der Form Designer (also die GUI Ansicht der UserForm) serviert. Gibt doch genug Moeglichkeiten um in die Codeansicht zu wechseln. F7, Doppelklick auf die UserForm, Rechtsklick UserForm - Code Anzeigen, Ansicht - Code Anzeigen ... etc.
Aber schoen, dass es funktioniert. ;-)
Gruesse,
Johannes

Anzeige
AW:VBA kann macht ja richtig Spaß machen
18.06.2008 02:23:00
stefan
wenn man solche Profis wie dich, Johannes ,fragen kann.
werde mir morgen den code nochmal genauer anschauen und versuchen zu verstehen/lernen warum/wieso er funktioniert.
wünsch dir noch eine gute nacht.
mfg stefan
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Ungebundene Userform immer im Vordergrund halten


Schritt-für-Schritt-Anleitung

Um eine ungebundene Userform in Excel VBA immer im Vordergrund zu halten, kannst du den folgenden VBA-Code verwenden. Achte darauf, den Code in das richtige Modul einzufügen. Hier ist, wie du vorgehen kannst:

  1. Öffne den VBA-Editor (Drücke ALT + F11).
  2. Füge eine neue Userform hinzu, falls du das noch nicht gemacht hast.
  3. Klicke doppelt auf die Userform, um den Code-Editor zu öffnen.
  4. Füge den folgenden Code in die Userform ein:
Option Explicit
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
Private Declare Function SetWindowPos Lib "User32" ( _
    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 Enum SWP_Flags
    SWP_NOSIZE = &H1
    SWP_NOMOVE = &H2
    SWP_NOACTIVATE = &H10
    SWP_SHOWWINDOW = &H40
End Enum

Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2

Private Sub UserForm_Activate()
    Call prcSetForeground
End Sub

Private Sub prcSetForeground()
    SetWindowPos GetHandle, HWND_TOPMOST, 0&, 0&, 0&, 0&, _
    SWP_NOSIZE Or SWP_NOMOVE Or SWP_NOACTIVATE Or SWP_SHOWWINDOW
End Sub

Private Function GetHandle() As Long
    Select Case Val(Application.Version)
        Case 8 'Office 97
            GetHandle = FindWindow("ThunderXFrame", Me.Caption)
        Case Else 'ab Office 2000
            GetHandle = FindWindow("ThunderDFrame", Me.Caption)
    End Select
End Function
  1. Schließe den VBA-Editor und teste die Userform.

Häufige Fehler und Lösungen

  • Fehler: Die Userform wird nicht immer im Vordergrund angezeigt.

    • Lösung: Stelle sicher, dass das ShowModal auf False gesetzt ist. Prüfe auch, ob der Code korrekt in das Userform-Modul eingefügt wurde.
  • Fehler: Der Projekt-Explorer zeigt die Userform nicht an.

    • Lösung: Du musst doppelt auf die Userform klicken, um in den Code-Editor zu gelangen. Es ist das normale Verhalten des VBA-Editors.

Alternative Methoden

Eine andere Möglichkeit, die Userform im Vordergrund zu halten, ist die Verwendung von Timer-Events, um den Vordergrundstatus regelmäßig zu überprüfen. Hier ist ein einfaches Beispiel:

Private Sub UserForm_Activate()
    Application.OnTime Now + TimeValue("00:00:01"), "SetUserFormOnTop"
End Sub

Sub SetUserFormOnTop()
    ' Dein Code zum Setzen der Userform im Vordergrund
    Call prcSetForeground
    ' Timer erneut setzen
    Application.OnTime Now + TimeValue("00:00:01"), "SetUserFormOnTop"
End Sub

Praktische Beispiele

Hier ist eine Beispielmappe, die du verwenden kannst, um die Funktionsweise zu testen: Beispielmappe herunterladen.

Du kannst die Userform starten und dann Excel minimieren oder ausblenden, um zu sehen, ob die Userform immer noch sichtbar bleibt.


Tipps für Profis

  • Nutze F7 im VBA-Editor, um schnell zwischen der Design- und der Code-Ansicht der Userform zu wechseln.
  • Experimentiere mit den SWP_Flags, um die Funktionalität deiner Userform zu optimieren.
  • Halte den Code modular, um die Wartung und Lesbarkeit zu verbessern.

FAQ: Häufige Fragen

1. Warum funktioniert der Code nicht bei mir?
Stelle sicher, dass du den Code korrekt in die Userform eingefügt hast und dass ShowModal auf False gesetzt ist.

2. Was ist der Unterschied zwischen ThunderXFrame und ThunderDFrame?
Diese Bezeichnungen beziehen sich auf unterschiedliche Versionen von VBA-Userforms. ThunderXFrame wird in Office 97 verwendet, während ThunderDFrame ab Office 2000 verwendet wird.

3. Kann ich den Code auch in einem Arbeitsblatt verwenden?
Der Code ist speziell für Userforms gedacht. Du solltest ihn in einem Userform-Modul verwenden, nicht in einem Arbeitsblatt oder regulären Modul.

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