Rilevamento di una finestra di dialogo aperta (Microsoft Word)
Thomas ha una macro che esegue varie funzioni a intervalli di tempo.
Alcune di queste funzioni non dovrebbero essere eseguite se una finestra di dialogo è aperta sullo schermo, perché il tentativo di eseguirle causerà un errore nelle funzioni. Si chiede se ci sia un modo, all’interno della macro, per rilevare se una finestra di dialogo, qualsiasi finestra di dialogo, è attualmente aperta. Thomas preferisce rilevare la finestra di dialogo aperta piuttosto che gestire un errore generato.
Forse l’unico modo per tentare di farlo è utilizzare FindWindow, che fa effettivamente parte dell’API di Windows. Il suo scopo è recuperare una maniglia per una particolare finestra aperta. (Una finestra di dialogo non è altro che una finestra aperta e ogni finestra di dialogo ha un nome.) Questo approccio non ti dirà se qualsiasi finestra di dialogo è aperta, ma ti dirà se una finestra di dialogo specifica è aperta.
Ecco un rapido esempio per mostrare come può essere utilizzata la funzione 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
Si noti che la funzione FindWindow deve essere dichiarata al di fuori della procedura VBA. Quindi, all’interno della procedura, è necessario specificare il nome della finestra di dialogo che si desidera trovare. Questo è il nome visualizzato nella barra del titolo per la finestra di dialogo e la funzione FindWindow non fa distinzione tra maiuscole e minuscole. Il valore restituito per FindWindow sarà un handle per la finestra di dialogo, se è aperta. Se non è aperto, la funzione restituisce uno 0.
Ricorda anche che le finestre di dialogo possono essere di due tipi: modale e non modale. Se una particolare finestra di dialogo è modale, è necessario chiuderla prima di poter eseguire qualsiasi altra azione sul sistema. A un certo punto ti consigliamo di eseguire test approfonditi con le finestre di dialogo, poiché potresti ottenere prestazioni diverse dalla tua macro a seconda che una finestra di dialogo aperta sia modale o meno.
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti WordTips), ho preparato una pagina speciale che include informazioni utili.
WordTips è la tua fonte di formazione economica su Microsoft Word.
(Microsoft Word è il software di elaborazione testi più popolare al mondo.) Questo suggerimento (12356) si applica a Microsoft Word 2007, 2010, 2013, 2016, 2019 e Word in Office 365. Puoi trovare una versione di questo suggerimento per vecchia interfaccia del menu di Word qui: