繁体   English   中英

Word VBA Range.Find 更改样式

[英]Word VBA Range.Find changes style

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

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

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

- 应在列表项中加粗的 DictionaryWord

变成

列表项中应加粗的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定义为基于默认段落样式的 Character 样式,这样就不会先应用其他 styles。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM