Aktuelle Seite:
/vba/vbafensterliste.htm
Letzte Änderung: 24.06.2006

Getestet unter Word2000  
Makro/Datei speichern
Print

Word 2000 besitzt leider die Angewohnheit für jedes Dokument eine neue Instanz zu öffnen und in der Taskleiste anzuzeigen. Dieses Verhalten lässt sich auch nicht ändern und kann erst in Word XP konfiguriert werden.
Wer mehrere Dokumente geöffnet hat und somit auch mehrere Word-Instanzen sieht, kann auf verschiedene Weisen zwischen den Dokumenten wechseln:

  • über den Menüpunkt "Fenster",
  • mit dem Tastenkürzen <Strg><F6>,
  • oder durch Anklicken der Word-Instanz in der Tastleiste

Bei vielen Dokumenten kann es mitunter umständlich sein, das gewünschte Dokument mit einem Klick in den Vordergrund zu holen.
Eine weitere Möglichkeit, alle geöffnenten Dokumente auf einen Blick in jeder Word-Instanz zu sehen, bietet die folgende Lösung. Sie basiert auf verschiedenen Makros, die für jedes Dokument einen eigenen Eintrag in einer Symbolleiste anlegen. Zur Identifizierung werden die Dateinamen verwendet.

Alle Worddokumente auflisten

Damit die Symbolleiste beim Schlieîen oder Öffnen eines Dokumentes aber auch beim Starten und Beenden von Word aktualisiert wird, müssen sämtliche Ereignisse abgefangen werden. Dieses lässt sich mit Hilfe der Auto-Makros und durch Einklinken in die Menübefehle erreichen.

Menübefehle:
  • DateiNeu (Menübefehl)
  • DateiNeuStandard (Symbol)
  • DateiÖffnen
  • DateiSchlieîen
  • DateiSpeichernUnter
Auto-Makros:
  • AutoClose
  • AutoExec
  • AutoNew
  • AutoOpen

Der folgende Auszug erzeugt für jedes Dokument eine eigene Schaltfläche mit dem Dateinamen in der Symbolleiste FensterListe. Als Aktion (.OnAction) wird das Makro ShowWindow verwendet, das das Dokument in den Vordergrund holt.
Über das erste Symbol kann die Liste jederzeit manuell aktualisiert werden, falls das Ereignis, das ein Dokument öffnet, nicht erkannt werden sollte (z.B. häufig bei OLE-Verknüpfungen)

Sub MakeButton(Optional Parameter As String)  
Set cbFensterListe = CommandBars("FensterListe")
cbFensterListe.Visible = True 
MakeButtonAktualisieren 'Schaltfläche erzeugen  
iCtrlCount = cbFensterListe.Controls.Count ' Anzahl Controls  
iWindowCount = Application.Windows.Count ' Anzahl Dokumente  
If ((iWindowCount + 1) <> iCtrlCount) Then Leisteeinblenden
If Parameter = "close" Then 
  sWindowCaption = Application.ActiveWindow.Caption
End If 
iCtrlCount = cbFensterListe.Controls.Count
For j = iCtrlCount To 1 Step -1
  sCtrlName = CommandBars("FensterListe").Controls.Item(j).Caption
  If sCtrlName = "" Or sCtrlName <> "Aktualisieren" Then 
    CommandBars("FensterListe").Controls(sCtrlName).Delete
  If iCtrlCount = 1 And sCtrlName = "Aktualisieren" Then Exit For 
End If 
Next j
For i = 1 To iWindowCount
  sWindowCaption = Application.ActiveWindow.Caption
  sWindowName = Application.Windows.Item(i)
  If Not (Parameter = "close" And sWindowName = sWindowCaption) Then 
    Set ctrlName = cbFensterListe.Controls.Add(Type:=msoControlButton, _
      Temporary:=True)
    With ctrlName
      .Caption = sWindowName
      .Style = msoButtonCaption
      .OnAction = "ShowWindow"
      .BeginGroup = True 
    End With 
  End If 
Next i
ende:
End Sub 

Die weiteren Makros erzeugen die Symbolleiste, sofern sie noch nicht angelegt wurde, legen die Schaltfläche zum Aktualisieren an, blenden die Symbolleiste ein und fangen die Ereignisse und Menübefehle ab.

Das vollständige Modul mit allen Makros befindet sich in der Download-Datei.

Hinweis:
Obwohl ich versucht habe, alle Ereignisse abzufangen, kann es trotzdem vorkommen, dass die Fensterliste nicht aktualisiert wird. Normalerweise lässt sie sich dann über die erste Schaltfläche aktualisieren. Für Hinweise auf fehlende Ereignisse (am besten mit Lösungen) wäre ich dankbar.

Weiter (Teil II) >>


 www.chf-online.de/vba/vbafensterliste.htm © 2001-11 Christian Freßdorf (Zaphod-Systems)