Freigeben über

Userform verschwindet hinter Arbeitsmappe

Anonym
2014-06-03T20:47:45+00:00

Hallo,

aus einer Arbeitsmappe (AM-A) starte ich eine Userform, aus der heraus ich u. a. alle geöffneten Arbeitsmappen ansteuern bzw. auch Arbeitsmappen öffnen kann. Bis Excel 2010 war es so, dass die selektierte Arbeitsmappe vor der AM-A angezeigt wurde, die Userform jedoch weiter im Vordergrund blieb. Die Userform ist von der Größe recht klein gehalten, damit eine Bearbeitung von selektierter AM aber auch die Eingabe von Informationen in der Userform parallel vorgenommen werden können.

Seit Excel 2013 werden alle geöffneten Arbeitsmappen in separaten Fenstern angezeigt, was in vielen Dingen sehr praktisch ist. Jedoch wird nun die Userform ebenfalls von der selektierten AM verdeckt.

Wie kann ich nun beim Wechsel der AM die Userform weiterhin im Vordergrund halten?

Bei der Verwendung von zwei Bildschirmen ist das kein Problem. Da kann ich die Userform auf den zweiten Bildschirm verschieben. Aber wenn ich nur mit einem Laptop unterwegs bin? Die Fenster hin und herschieben? Die selektierte AM nur auf einer Hälfte des ohnehin kleinen Bildschirms anzeigen lassen?

Beste Grüße

Mike

Microsoft 365 und Office | Excel | Für Zuhause | Windows

Gesperrte Frage. Diese Frage wurde aus der Microsoft-Support-Community migriert. Sie können darüber abstimmen, ob sie hilfreich ist, aber Sie können keine Kommentare oder Antworten hinzufügen oder der Frage folgen.

0 Kommentare Keine Kommentare

11 Antworten

Sortieren nach: Am hilfreichsten
  1. Andreas Killer 144.1K Zuverlässigkeitspunkte Freiwilliger Moderator
    2014-07-20T16:32:22+00:00

    Hallo Mike,

    also der Trick war das man die Instanz von Excel unsichtbar macht, dann bleibt das Fenster immer oben, egal welches Fenster grad aktiv ist. Also zusätzlich zum Code oben:

    Private Sub UserForm_Activate()

      Application.Visible = False

    End Sub

    Private Sub UserForm_Terminate()

      Application.Visible = True

    End Sub

    Damit Du "Mappe1" dann sehen kannst musst Du natürlich zwischendurch mal "Application.Visible = True" sagen. Der Haken ist das es IMHO kein Event gibt das Dir sagt das jemand auf die Userform geklickt hat.

    Ich hab mir in solchen Fällen entweder mit einem Timer beholfen und alle 250ms das aktive Fenster abgefragt oder den ganzen Userform-Code in eine separate Mappe getan, welche ich dann auch als separate Instanz gestartet habe.

    Andreas.

    War diese Antwort hilfreich?

    Eine Person fand diese Antwort hilfreich.
    0 Kommentare Keine Kommentare
  2. Andreas Killer 144.1K Zuverlässigkeitspunkte Freiwilliger Moderator
    2014-06-10T09:16:01+00:00

    wenn das funktioniert, dann wäre dies durchaus ein Weg.

    Hätte man hier nicht einfach einen weiteren Parameter für die Anzeige der Userform einrichten können?

    Hätte hätte Fahrradkette. ;-)

    Wenn Du ein Fenster generell immer vorne haben willst, dann gibt es dafür in Windows eine API. Mach mal eine neue Datei, füge eine Userform hinzu, kopiere den Code unten in das Codemodul und starte sie (drück F5).

    Dann wechsle zu irgendwelchen anderen Fenstern.

    Andreas.

    PS.: Ich bin die nächsten 2 Wochen in Urlaub, eine Antwort kann eine Weile dauern falls du weitere Fragen hast.

    Option Explicit

    Private Const SWP_NOSIZE = &H1

    Private Const SWP_NOMOVE = &H2

    Private Const SWP_NOACTIVATE = &H10

    Private Const SWP_SHOWWINDOW = &H40

    Private Const HWND_TOPMOST = -1

    #If Win64 Then

    Private Declare PtrSafe Function SetWindowPos Lib "user32" ( _

      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" Alias "FindWindowA" ( _

      ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr

    #Else

    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 Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _

      ByVal lpClassName As String, ByVal lpWindowName As String) As Long

    #End If

    Private Sub UserForm_Activate()

    #If Win64 Then

      Dim hwnd As LongPtr

    #Else

      Dim hwnd As Long

    #End If

      hwnd = FindWindow("ThunderDFrame", Me.Caption)

      SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, _

        SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE

    End Sub

    War diese Antwort hilfreich?

    Eine Person fand diese Antwort hilfreich.
    0 Kommentare Keine Kommentare
  3. Anonym
    2014-06-09T11:58:21+00:00

    Hallo Mike,

    öffnet xl2013 in verschiedenen Fenstern oder in verschiedenen Instanzen?

    Mit einer vbmodeless angezeigten UserForm sollte sie dann oben bleiben. Das geht allerdings nicht bei verschiedenen Instanzen. Aber ich denke nicht, dass Microsoft mit xl2013 neue Wege beschreitet, vor allem da verschiedene Instanzen mehr Ressourcen brauchen würden.

    Mit freundlichen Grüßen

    Claus

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  4. Anonym
    2014-06-09T11:18:34+00:00

    Hallo Andreas,

    wenn das funktioniert, dann wäre dies durchaus ein Weg. Microsoft hat Excel dahingehend geändert, dass alle Arbeitsmappen in einem eigenen Fenster angezeigt werden. Dies ist eine wunderbare Sache. Doch dadurch stellt sich eben das Problem mit der Userform ein.

    Hätte man hier nicht einfach einen weiteren Parameter für die Anzeige der Userform einrichten können?

    Wie z. B. UserForm1.Show  vbModeless, vb...

    Es gibt viele Firmen, die Excel nutzen und sich kleine Programme programmieren um ihre eigentlichen Aufgaben besser bearbeiten zu können. Und nun muss man sich mit so etwas rumschlagen.

    Wie ärgerlich.

    Wenn ich Zeit und Muße habe, dann werde ich mir das Problem mal etwas genauer ansehen. In manchen Foren wurden ähnliche Probleme bereits beschrieben. Doch bis dahin werde ich Excel 2007 verwenden. Da funktionieren diese besagten Dateien noch.

    MfG

    Mike

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  5. Andreas Killer 144.1K Zuverlässigkeitspunkte Freiwilliger Moderator
    2014-06-04T07:16:42+00:00

    Hmm, wenn man eine Userform nicht modal anzeigt, dann ist sie ein separates Fenster, dieses ließe sich dann in den Vordergrund zwingen, generell vor alle Fenster.

    Wäre das ein Weg?

    Andreas.

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare