Thomas hat ein Makro, das in zeitlichen Abständen verschiedene Funktionen ausführt.

Einige dieser Funktionen sollten nicht ausgeführt werden, wenn ein Dialogfeld auf dem Bildschirm geöffnet ist, da der Versuch, sie auszuführen, zu einem Fehler in den Funktionen führt. Er fragt sich, ob es innerhalb des Makros eine Möglichkeit gibt, festzustellen, ob ein Dialogfeld – ein beliebiges Dialogfeld – derzeit geöffnet ist. Thomas würde lieber das geöffnete Dialogfeld erkennen, als sich mit einem generierten Fehler zu befassen.

Möglicherweise besteht die einzige Möglichkeit, dies zu versuchen, darin, FindWindow zu verwenden, das tatsächlich Teil der Windows-API ist. Der Zweck besteht darin, ein Handle für ein bestimmtes geöffnetes Fenster abzurufen. (Ein Dialogfeld ist nichts anderes als ein geöffnetes Fenster, und jedes Dialogfeld hat einen Namen.) Dieser Ansatz sagt Ihnen nicht, ob jedes Dialogfeld geöffnet ist, sondern ob ein spezifisches Dialogfeld geöffnet ist.

Hier ist ein kurzes Beispiel, um zu zeigen, wie die FindWindow-Funktion verwendet werden kann:

Declare Function FindWindow Lib "user32" Alias "FindWindowA" _   (ByVal wClassName As Any, ByVal wWindowName As String) As Long

Sub testDialogOpen()

Dim wHandle As Long     Dim wName As String

wName = "Find and Replace"

wHandle = FindWindow(0&, wName)

If wHandle = 0 Then         MsgBox "Dialog window is not open"

Else         MsgBox "Dialog window is open"

End If End Sub

Beachten Sie, dass die FindWindow-Funktion außerhalb Ihrer VBA-Prozedur deklariert werden muss. Anschließend müssen Sie innerhalb der Prozedur den Namen des Dialogfelds angeben, über das Sie sich informieren möchten. Dies ist der Name, der in der Titelleiste des Dialogfelds angezeigt wird, und bei der FindWindow-Funktion wird die Groß- und Kleinschreibung nicht berücksichtigt. Der Rückgabewert für FindWindow ist ein Handle für das Dialogfeld, sofern es geöffnet ist. Wenn es nicht geöffnet ist, gibt die Funktion eine 0 zurück.

Denken Sie auch daran, dass es zwei Arten von Dialogfeldern geben kann: modal und nicht modal. Wenn ein bestimmtes Dialogfeld modal ist, muss es geschlossen werden, bevor andere Aktionen auf dem System ausgeführt werden können. Sie sollten an dieser Stelle umfangreiche Tests mit den Dialogfeldern durchführen, da Ihr Makro möglicherweise eine unterschiedliche Leistung erzielt, je nachdem, ob ein geöffnetes Dialogfeld modal ist oder nicht.

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der WordTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

WordTips ist Ihre Quelle für kostengünstige Microsoft Word-Schulungen.

(Microsoft Word ist die weltweit beliebteste Textverarbeitungssoftware.) Dieser Tipp (12355) gilt für Microsoft Word 97, 2000, 2002 und 2003. Sie finden eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Word (Word 2007) und später) hier: