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

Userform immer im Vordergrund halten.

Forumthread: Userform immer im Vordergrund halten.

Userform immer im Vordergrund halten.
13.09.2016 11:37:10
Daniel

Hallo
ich arbeite mit Excel 2013 und habe folgendes Problem mit einer Userform:
die Userform (nicht Modal) soll eigentlich zur Bearbeitung von anderen geöffneten Excelmappen dienen.
Die Mappe der Userform wird nicht benötigt und sollte unsichtbar bleiben.
Das Problem ist, wenn ich das Fenster der Userformmappe minimiere, verschwindet auch die Userform.
Wenn ich die andere Mappe aktiviere, überdeckt sie die Userform.
in den ältern Versionen bis 2010 war es so, dass die Userform immer im Vordergrund war und somit andere Mappen problemlos bearbeitet werden konnten.
Wie kann ich auch bei Excel 2013 die Userform unabhängig von der aktiven Mappe immer im Vordergrund halten?
Gruß Daniel

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform immer im Vordergrund halten.
13.09.2016 12:05:37
Nepumuk
Hallo,
teste mal:
Option Explicit

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 FindWindowA Lib "user32.dll" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As LongPtr

Private Const HWND_TOPMOST As LongPtr = -1
Private Const SWP_NOSIZE As Long = &H1
Private Const SWP_NOMOVE As Long = &H2
Private Const GC_CLASSNAMEUSERFORM As String = "ThunderDFrame"

Private Sub CommandButton1_Click()
    Call Unload(Me)
End Sub

Private Sub UserForm_Activate()
    Dim lngptrHwnd As LongPtr
    lngptrHwnd = FindWindowA(GC_CLASSNAMEUSERFORM, Caption)
    Call SetWindowPos(lngptrHwnd, HWND_TOPMOST, _
        0&, 0&, 0&, 0&, SWP_NOMOVE Or SWP_NOSIZE)
End Sub

Gruß
Nepumuk
Anzeige
AW: Userform immer im Vordergrund halten.
13.09.2016 12:28:31
Daniel
Hi Nepumunk
Danke für deine Antwort.
ich habe den Code jetzt so wie er da steht in ins Modul der Userform übernommen und es funktioniert leider nicht.
Gruß Daniel
AW: Userform immer im Vordergrund halten.
13.09.2016 12:40:59
Nepumuk
Hallo,
kann ich mir nicht vorstellen, ich hab das extra noch getestet und er funktioniert bei mir einwandfrei. Versuch es nochmal in einer neuen Mappe.
Gruß
Nepumuk
Anzeige
AW: Userform immer im Vordergrund halten.
13.09.2016 12:51:23
Daniel
Hi
auch in einer neuen Datei ändert sich am Verhalten nichts.
bei minimiertem Fenster der Userform-Mappe verschwindet auch die Userform.
aktiviert man eine andere Mappe, so liegt die Userform im Hintergrund und wird vom Mappenfenster überdeckt.
verschiebt man die Userform an eine andere stelle, so kann man die andere Mappe einmalig bearbeiten, es wird aber sofort die Mappe der Userform akiviert.
Gruß Daniel
Anzeige
AW: Userform immer im Vordergrund halten.
13.09.2016 12:58:12
Nepumuk
Hallo,
dann weis ich auch nicht weiter. Ich lass die Frage mal offen.
Gruß
Nepumuk
AW: Userform immer im Vordergrund halten.
13.09.2016 14:43:13
Mullit
Hallo,
das könnte in Deinem Spezialfall ungünstig sein, daß Du immer noch die Userform-Mappe minimierst, die solltest Du vielleicht ganz aus dem Weg räumen und die Form über eine zweite Application starten, die Du Visible = False setzt, die Form müsste dann über API in der Taskleiste verankert sein, dann der harte Teil: Du müsstest versuchen von der Form-Application auf die Bearbeitungs-Application zuzugreifen...
Oder wenn alle Stricke reißen und vorhanden, erstellst Du Dir gleich ein Fenster in VisualStudio...
Gruß, Mullit
Anzeige
AW: Userform immer im Vordergrund halten.
13.09.2016 16:07:31
Daniel
Hi
zweite Applikation wäre wahrscheinlich ungünstig, da ich ja einerseits die andere Mappe bearbeiten will, aber schon auf die Daten aus der eigenen Mappe angewiesen bin.
In Excel 2010 ging das problemlos, da die Userform, da die Userform nicht an das Mappen-Fenster gebunden war.
Gruß Daniel
Anzeige
AW: Userform immer im Vordergrund halten.
13.09.2016 16:37:30
Mullit
Hallo,
tja wär wohl nicht so ganz ohne, da fällt mir aber gerade ein, wesentlich einfacher wäre die Verwendung eines Addins oder der Personal.xlsb aus der Du die Form z.B. über deren Open-Event ungebunden startest, auf die Form müsstest Du dann unabhängig von den Mappen zugreifen können, sowie umgekehrt...
Gruß, Mullit
Anzeige
AW: Userform immer im Vordergrund halten.
13.09.2016 16:57:15
Daniel
Hi
Personal.xlsb oder AddIn ist ungünstig.
da will ich eigentlich nur die Sachen drin haben, mit denen nur ich arbeite.
Gruß Daniel
AW: Userform immer im Vordergrund halten.
13.09.2016 16:45:25
Mullit
Hallo,
...hmm allerdings (sprach die Sphinx...) ich hab hier ebenfalls nur xl2010 am Start, könnte natürlich sein, daß xl2013/2016 da auch Schwierigkeiten machen...
Gruß, Mullit

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Userform immer im Vordergrund halten in Excel 2013


Schritt-für-Schritt-Anleitung

Um eine Userform in Excel 2013 immer im Vordergrund zu halten, kannst du folgenden VBA-Code verwenden:

  1. Öffne deine Excel-Datei und gehe zur Entwicklertools-Registerkarte.
  2. Klicke auf "Visual Basic", um den VBA-Editor zu öffnen.
  3. Füge in das Modul deiner Userform folgenden Code ein:
Option Explicit

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 FindWindowA Lib "user32.dll" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As LongPtr

Private Const HWND_TOPMOST As LongPtr = -1
Private Const SWP_NOSIZE As Long = &H1
Private Const SWP_NOMOVE As Long = &H2
Private Const GC_CLASSNAMEUSERFORM As String = "ThunderDFrame"

Private Sub UserForm_Activate()
    Dim lngptrHwnd As LongPtr
    lngptrHwnd = FindWindowA(GC_CLASSNAMEUSERFORM, Caption)
    Call SetWindowPos(lngptrHwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub
  1. Schließe den VBA-Editor und teste die Userform. Sie sollte jetzt immer im Vordergrund bleiben, auch wenn du andere Excel-Dateien öffnest.

Häufige Fehler und Lösungen

  • Userform verschwindet nach Minimierung: Wenn die Userform nach der Minimierung der Mappe verschwindet, überprüfe, ob du den Code korrekt in das Userform-Modul eingefügt hast. Achte auch darauf, dass die Userform nicht modal ist.

  • Userform wird von anderen Fenstern überdeckt: Stelle sicher, dass der SetWindowPos-Befehl im UserForm_Activate-Ereignis korrekt aufgerufen wird.

  • Test in einer neuen Datei: Wenn der Code nicht funktioniert, teste ihn in einer neuen Excel-Datei, um sicherzustellen, dass keine anderen Makros oder Einstellungen das Verhalten beeinflussen.


Alternative Methoden

Eine alternative Methode, um die Userform immer im Vordergrund zu halten, besteht darin, eine zweite Excel-Anwendung zu verwenden:

  1. Öffne eine neue Instanz von Excel über VBA.
  2. Setze die Sichtbarkeit dieser neuen Instanz auf False.
  3. Starte die Userform aus dieser Anwendung.

Zusätzlich kannst du auch ein Add-In oder die Personal.xlsb-Datei verwenden, um die Userform zu erstellen. Diese Methode kann jedoch komplizierter sein und ist möglicherweise nicht für jeden geeignet.


Praktische Beispiele

Wenn du die Userform in Excel VBA in den Vordergrund bringen möchtest, kannst du ein einfaches Beispiel verwenden, um dies zu demonstrieren. Erstelle eine Userform mit einem Button und füge den oben genannten Code hinzu. Beim Klicken auf den Button sollte die Userform erscheinen und immer im Vordergrund bleiben:

Private Sub CommandButton1_Click()
    Me.Show
End Sub

Tipps für Profis

  • Verwendung von API-Funktionen: Das Nutzen von Windows-API-Funktionen wie SetWindowPos ist eine effektive Methode, um die Kontrolle über Fenster in Excel zu übernehmen.

  • Debugging: Wenn dein Code nicht wie erwartet funktioniert, nutze die Debugging-Tools im VBA-Editor, um sicherzustellen, dass keine Fehler auftreten.

  • Vermeidung von Modal: Stelle sicher, dass deine Userform nicht modal ist, um die Flexibilität zu erhöhen und zu verhindern, dass sie andere Fenster blockiert.


FAQ: Häufige Fragen

1. Warum funktioniert der Code nicht in meiner Excel-Version?
Die Verwendung von PtrSafe im Code ist notwendig, wenn du eine 64-Bit-Version von Excel 2013 oder neuer verwendest. Stelle sicher, dass du die richtige Version des Codes verwendest.

2. Kann ich den Code auch für Word-Tabellen verwenden?
Der Code ist spezifisch für Excel VBA und kann nicht direkt für Word verwendet werden. Für Word musst du eine separate Lösung entwickeln.

3. Was mache ich, wenn die Userform immer noch nicht immer im Vordergrund bleibt?
Überprüfe, ob andere Makros oder Add-Ins aktiv sind, die das Verhalten deiner Userform beeinflussen könnten. Manchmal kann auch eine Einstellung in Excel das Verhalten ändern.

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