Thomas有一个宏,可以按时间间隔执行各种功能。

如果在屏幕上打开对话框,则不应执行其中某些功能,因为尝试执行这些功能会导致功能错误。他想知道宏内是否有某种方法可以检测对话框(任何对话框)当前是否打开。 Thomas宁愿检测打开的对话框,也不愿处理产生的错误。

可能尝试执行此操作的唯一方法是使用FindWindow,它实际上是Windows API的一部分。其目的是检索特定打开的窗口的句柄。 (一个对话框只不过是一个打开的窗口,每个对话框都有一个名称。)这种方法不会告诉您_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

请注意,需要在VBA过程之外声明FindWindow函数。然后,在该过程中,您需要指定要查找的对话框的名称。这是显示在对话框标题栏中的名称,并且FindWindow函数不区分大小写。 FindWindow的返回值将是对话框的句柄(如果已打开)。如果未打开,则该函数返回0。

还要记住,对话框可以有两种类型:模式对话框和非模式对话框。如果特定对话框是模式对话框,则必须先将其关闭,然后才能在系统上执行任何其他操作。您可能需要对对话框进行广泛的测试,因为您可能会从宏中获得不同的性能,具体取决于打开的对话框是否为模态对话框。

注意:

如果您想知道如何使用此页面(或_WordTips_网站上的任何其他页面)中描述的宏,我准备了一个包含有用信息的特殊页面。

链接:/ wordribbon-WordTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

_WordTips_是您进行经济有效的Microsoft Word培训的来源。

(Microsoft Word是世界上最流行的文字处理软件。)本技巧(12356)适用于Microsoft Word 2007、2010、2013、2016、2019和Office 365中的Word。 Word的旧菜单界面在这里:

链接:/ word-Detecting_an_Open_Dialog_Box [检测打开的对话框]。