Localizar / Substituir Modal do Word no VBA

1

Eu quero preparar e mostrar a caixa de diálogo Localizar / Substituir. No entanto, o código a seguir mostra a caixa de diálogo em um status restrito e você não pode acessar o texto do documento.

Alguma idéia de como ela é modelada, assim como você obtém da Ctl-H?

Public Sub AutoFind()
    On Error GoTo myErrorHandler

    Selection.HomeKey Unit:=wdStory

    Dim theDialog As dialog
    Set theDialog = Application.Dialogs(wdDialogEditReplace)
    theDialog.Find = "the"
    theDialog.replace = "an"

    theDialog.Show
End Sub
    
por ForEachLoop 02.03.2017 / 21:59

1 resposta

2

Parece que o modal é o único comportamento por design, mas há uma solução alternativa:

CommandBars.FindControl(ID).Execute

Com o ID apropriado, isso é análogo a apertar o botão com o mouse para abrir a caixa de diálogo.

Eu nunca usei isso sozinho, exceto para confirmar que funciona em v2010, e meu instinto diz que se deve procurar uma maneira de confirmar ou derivar o número de ID (ou talvez haja um constante), já que é um disco rígido. codificado "número mágico" que pode mudar de versão para versão.

No Word 2010, que tenho à mão, "Localizar" é ID: = 141, "Substituir" é ID: = 313.

Para que você possa configurar uma pesquisa "programática" e, em seguida, chamar, use o método CommandBars acima para abrir a caixa de diálogo. Deve ser preenchido do jeito que você quer e deve ser não-modal.

Sub TestMacro()
Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "test find field"
        .Replacement.Text = "test replace field"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With

    CommandBars.FindControl(ID:=313).Execute
end sub

Obviamente, não-modal também significa que a execução de código continua imediatamente.

    
por 02.03.2017 / 22:45