首页 > 解决方案 > 如何通过 Word vba range.find 设置焦点

问题描述

我正在 Word 中编写一个宏,用于用映射定义替换一些文本。

我想为用户提供对每次替换进行确认的选项,就像默认的查找和替换一样。

如何将焦点放在找到的文本上?如何将特定部分滚动到视图中?

我需要使用自定义 VBA 代码(而不是默认的查找和替换),因为我必须在读取映射后处理文档。

我已经能够替换文本,并向用户显示警报。但是,我想在显示警报时将重点放在文本上。

当前代码:

Do While myRange.Find.Execute( _
            FindText:=dict.Items()(i) & " (" & Word & ")", _
            MatchCase:=False, _
            MatchWholeWord:=True _
            )                    
    myRange.Select                        
    If MsgBox("Replace '" & myRange.Find.Text & "' with '" & Word & "'?", vbYesNo) = vbYes Then
        myRange.Text = Word
    End If

    myRange.Start = myRange.Start + Len(myRange.Find.Text)
    myRange.End = cached
Loop

ps 我打开了一个自定义表单/对话框,从中运行宏;所以文本在对话框后面。

编辑:根据 Jay 的回复,我再次检查了 Find & Replace 对话框的行为。对话框会根据文本的位置移动。当我在文本上有一个表单和一个确认对话框时,我可以达到同样的效果吗?

标签: vbams-word

解决方案


代码中已经存在的语句 myRange.Select 将选择放在找到的文本上,如果它不在屏幕上,则将其滚动到视图中。但是,如果选择隐藏在自定义表单(用户表单?)或消息框后面,那将无济于事。如果您可以确定选择相对于屏幕坐标的位置,则可以将表单移开。


推荐阅读