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

Word VBA Range.Find 更改样式

如何解决Word VBA Range.Find 更改样式

我有一个自动生成的文档。文档的每个部分都有一个描述,然后是一个句子列表,这些句子被列为不同的列表项。这非常有效。

但是,需要更改某些属于字典的单词的样式,这些单词可能出现在文本的任何位置。鉴于字典存储在数据库中,因此不能硬编码。 因此,解决方案是通过 Range.Find 来替换不同单词的样式。

当单词嵌入到句子中时,此解决方案非常有效,但当相关单词位于带项目符号的句子开头时会更改项目符号样式。

- 应该在列表项中加粗的字典词

变成

DictionaryWord 应该在列表项中加粗

然而,

- 但是,这个 DictionayWord 在没有删除“列表”样式的情况下正确加粗

我曾尝试在第一个单词之前输入一个虚拟文本,然后通过另一个 Range.Find 将其删除,但问题仍然存在于我删除虚拟文本的那一刻。

改变字典词的代码如下:

 Set oRange = odoc.Content
 With oRange.Find
    .Replacement.ClearFormatting
    .Format = True
    .Forward = True
    .MatchCase = True
    .MatchWholeWord = True
    .Wrap = wdFindContinue
    Set rsdictionary = DB.OpenRecordset("qrydictionaryterms",dbOpenSnapshot)
    .Replacement.Style = "Dictionary Style"
    While Not rsdictionary .EOF
        .Execute findtext:=rsdictionary ("CDMStereotype"),MatchCase:=True,Replace:=wdReplaceAll
        rsdictionary .MoveNext
     Wend
 end with

对于如何解决此问题的任何建议,我将不胜感激。

解决方法

感谢所有提供答案的人,但我的代码似乎没有任何问题。

对于以后可能遇到此问题的其他人,请参阅以下说明:

问题在于 DictionaryWord 的应用样式不是基于默认段落样式,而是基于另一种样式。 Word 似乎是逐步应用样式的,它所做的第一件事是应用 DictionaryWord 样式所基于的样式(删除项目符号),然后应用DictionaryWord 样式。

对此的解决方案是将 DictionaryWord 定义为基于默认段落样式的字符样式,这样就不会先应用其他样式。

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