VBA - Alle Fenster des aktiven Workbook schließen
#1
Hallo wertes Forum,

ich habe da ein Problem mit einer Datei mit mehreren Fenstern.
Wie bekomme ich per VBA alle Fenster bis auf das letzte des aktiven Workbooks geschlossen?

In der Datei wurde evtl. beim vorherigen Bearbeiten per Code "ActiveWindow.NewWindow" ein neues Fenster erzeugt. Beim Speichern wurde folglich das zweite Fenster mit gespeichert.
Jetzt soll dieses zweite Fenster beim erneuten Öffnen der Datei geschlossen werden (oder auch beim Aktivieren eines anderen Blattes des Workbooks).

Ich habe eine Testdatei mit meinem kläglichen Code angehängt.
Code:
Sub Makro1()

Dim Fenster As Object

For Each Fenster In Application.Windows
    Debug.Print Fenster.Name
    If IsNumeric(Right(Fenster.Name, 1)) Then
        Fenster.Close
    End If
Next Fenster

End Sub
Ich bekomme in der Zeile Debug.Print... den Laufzeitfehler 438 ("Objekt unterstützt diese Eigenschaft oder Methode nicht"

In der Originaldatei werden per Doppelklick aus einer Liste Daten gefiltert und diese als zweites kleineres Fenster vor dem Originalfenster dargestellt.
Code:
        Set Anzeige = ThisWorkbook.Worksheets("Anzeige")
        ActiveWindow.NewWindow
        Anzeige.Visible = True
        Anzeige.Activate
        ActiveWindow.WindowState = xlNormal
        With ActiveWindow
            .Top = 100
            .Left = 200
            .Width = 937.5
            .Height = 608.25
        End With
Dieses wird durch den User manchmal nicht geschlossen, sondern durch Klick auf das Originalfenster in den Hintergrund geschoben. Oder kann ich da per Code das zweite Fenster bereits schließen sobald es deaktiviert wird?

Vielen Dank für Eure Hilfe,
Lutz


Angehängte Dateien
.xlsm   Test Fenster.xlsm (Größe: 15,21 KB / Downloads: 3)
Antworten Top
#2
Hi,

ein Window-Objekt kennt keine Eigenschaft .Name, aber dafür eine Eigenschaft .Caption

Wenn du Fenster nicht As Object sondern As Window definiert hättest, würde dir der VBE dabei auch weiter helfen...


Im Übrigen wäre es vermutlich geschickter nicht Application.Windows sondern ThisWorkbook.Windows zu verwenden.
Dann müsste eigentlich auch folgendes funktionieren (ungetestet):
Code:
Dim i As Long
With ThisWorkbook.Windws
    For i = .Count To 2 Step -1
        .item(i).Close
    Next i
End With
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#3
Hallo Lutz,

mit diesem Code werden alle Fenster außer dem ursprünglichen geschlossen:

Code:
Sub CloseAllNewWindows()
  Dim oWin As Window
  Application.ScreenUpdating = False
  With ThisWorkbook
    For Each oWin In .Windows
      If oWin.WindowNumber > 1 Then oWin.Close
    Next oWin
  End With
  Application.ScreenUpdating = True
End Sub

Gruß Uwe
Antworten Top
#4
Kann man einfacher machen mit Shapes statt Fenstern:


Angehängte Dateien
.xlsb   __Shape statt Fenster.xlsb (Größe: 21,21 KB / Downloads: 1)
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste