Thomasには、一定の間隔でさまざまな機能を実行するマクロがあります。

これらの機能の一部は、画面上でダイアログボックスが開いている場合は実行しないでください。実行しようとすると、機能でエラーが発生するためです。彼は、マクロ内に、ダイアログボックス(任意のダイアログボックス)が現在開いているかどうかを検出する方法があるかどうか疑問に思います。 Thomasは、生成されたエラーを処理するのではなく、開いているダイアログボックスを検出したいと考えています。

おそらく、これを試みる唯一の方法は、実際にはWindowsAPIの一部であるFindWindowを使用することです。その目的は、特定の開いているウィンドウへのハンドルを取得することです。 (ダイアログボックスは開いているウィンドウに過ぎず、各ダイアログボックスには名前があります。)このアプローチでは、_any_ダイアログボックスが開いているかどうかはわかりませんが、_specific_ダイアログボックスが開いているかどうかはわかります。

FindWindow関数の使用方法を示す簡単な例を次に示します。

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

FindWindow関数は、VBAプロシージャの外部で宣言する必要があることに注意してください。次に、手順内で、調べたいダイアログボックスの名前を指定する必要があります。これはダイアログボックスのタイトルバーに表示される名前であり、FindWindow関数では大文字と小文字は区別されません。 FindWindowの戻り値は、ダイアログボックスが開いている場合、そのダイアログボックスのハンドルになります。開いていない場合、関数は0を返します。

ダイアログボックスには、モーダルと非モーダルの2つのタイプがあることも忘れないでください。特定のダイアログボックスがモーダルである場合、システムで他のアクションを実行する前に、そのダイアログボックスを閉じる必要があります。開いているダイアログボックスがモーダルであるかどうかによってマクロとは異なるパフォーマンスが得られる可能性があるため、ある時点でダイアログボックスを使用して広範なテストを実行することをお勧めします。

注:

このページ(または_WordTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。

(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(12356)は、Microsoft Word 2007、2010、2013、2016、2019、およびOffice 365のWordに適用されます。このヒントのバージョンは、ここにWordの古いメニューインターフェイス: