微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Application.Selection.Find.Execute() 即使在选择之外也可以使用文本进行操作

如何解决Application.Selection.Find.Execute() 即使在选择之外也可以使用文本进行操作

我正在开发 MS Word 插件,该插件旨在将选定的文本从拉丁文转换为西里尔文。方法如下:

pandoc

它大多工作正常,但有时会表现得很奇怪。当只选择一个字母时,程序会替换选择外的所有字母(如选定的字母)以及选择内的确切字母,当然,我不想要或不需要。它有时甚至会在选择之外使用随机(似乎是随机的)字母。

在调试时,我在 Watch 上设置了 Application.Selection.Text,这让我更不知道出了什么问题。

为什么它会这样工作,我应该怎么做才能防止在选择之外替换?

解决方法

如果您搜索的值与当前搜索范围完全匹配,Word 将假定它是刚刚找到它的结果(找到匹配时,搜索范围更改为匹配范围),因此将将搜索范围动态更改为当前搜索范围之前或之后(取决于设置)的内容。如果没有这种行为,每次搜索下一个匹配项时,搜索范围都不会改变,因为它已经完全包含了您要搜索的值。

当您执行查找和替换时,情况是一样的。如果您要搜索的值与当前搜索范围完全匹配,Word 将更改搜索范围,如果 Replace 属性的值为 2 (WdReplaceAll),则当前搜索范围包含在新搜索范围中。

考虑到这一点,为了防止在当前选择正是您要搜索的值之一的情况下在选择之外进行替换,您可以在 For 循环的开头添加一些代码来检查是否当前选择等于 latin[i],如果等于 latin[i],则用 cyrillic[i] 替换该值,然后退出 For 循环。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。