Thomas tiene una macro que realiza varias funciones a intervalos cronometrados.

Algunas de esas funciones no deben realizarse si hay un cuadro de diálogo abierto en la pantalla, porque intentar realizarlas provocará un error en las funciones. Se pregunta si hay alguna forma, dentro de la macro, de detectar si un cuadro de diálogo, cualquier cuadro de diálogo, está abierto actualmente. Thomas prefiere detectar el cuadro de diálogo abierto en lugar de ocuparse de un error generado.

Quizás la única forma de intentar hacer esto es usar FindWindow, que en realidad es parte de la API de Windows. Su propósito es recuperar un identificador de una ventana abierta en particular. (Un cuadro de diálogo no es más que una ventana abierta, y cada cuadro de diálogo tiene un nombre). Este enfoque no le dirá si cualquier cuadro de diálogo está abierto, pero le dirá si un cuadro de diálogo específico está abierto.

Aquí hay un ejemplo rápido para mostrar cómo se puede usar la función 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

Tenga en cuenta que la función FindWindow debe declararse fuera de su procedimiento de VBA. Luego, dentro del procedimiento, debe especificar el nombre del cuadro de diálogo sobre el que desea obtener información. Este es el nombre que aparece en la barra de título del cuadro de diálogo, y la función FindWindow no distingue entre mayúsculas y minúsculas. El valor de retorno para FindWindow será un identificador para el cuadro de diálogo, si está abierto. Si no está abierta, la función devuelve un 0.

Recuerde también que los cuadros de diálogo pueden ser de dos tipos: modal y no modal. Si un cuadro de diálogo en particular es modal, debe descartarse antes de que se puedan realizar otras acciones en el sistema. Querrá hacer pruebas exhaustivas con los cuadros de diálogo en algún momento, ya que puede obtener un rendimiento diferente de su macro dependiendo de si un cuadro de diálogo abierto es modal o no.

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios WordTips), he preparado una página especial que incluye información útil.

link: / wordribbon-WordTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

WordTips es su fuente de formación rentable en Microsoft Word.

(Microsoft Word es el software de procesamiento de texto más popular del mundo). Este consejo (12356) se aplica a Microsoft Word 2007, 2010, 2013, 2016, 2019 y Word en Office 365. Puede encontrar una versión de este consejo para interfaz de menú anterior de Word aquí:

link: / word-Detecting_an_Open_Dialog_Box [Detectando un cuadro de diálogo abierto].