gpt4 book ai didi

vba - 如何在 VBA 中的范围/选择中替换 Microsoft Word 字符样式?

转载 作者:行者123 更新时间:2023-12-04 21:23:03 25 4
gpt4 key购买 nike

我正在处理带有宏的 Word 2007 模板,该模板将字符样式应用于所选文本。查找/替换功能似乎是一个很好的起点,但我想我发现了一个错误/限制,阻止宏按预期工作。

这是我的 vba 代码:

Sub restyleSelection()
Dim r As Range
Set r = Selection.Range
With r.Find
.Style = ActiveDocument.Styles("Default Paragraph Font")
.Text = ""
.Replacement.Text = ""
.Replacement.Style = ActiveDocument.Styles("Emphasis")
.Forward = True
.Wrap = wdFindStop
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
End Sub

如果我创建一个包含几个段落的测试文档并在其中一个段落中选择几个单词,然后运行宏,则“强调”样式不仅应用于选择,而且超出选择的结尾到结尾的文件。

使用实际的 GUI 查找/替换工具时,此行为是相同的。

我的问题是:如何克服此错误/限制并应用字符样式 在选择/范围内?

更多信息:
我真正需要宏做的是将某些格式应用于整个选择,同时保持选择中的现有字符样式。例如,如果所选文本包含粗体、斜体字符,其余为默认段落字体,则宏应将粗体替换为“修订粗体”,将“斜体”替换为“修订斜体”,以及将“默认段落字体”替换为“修订版”。这样,当我使用伴随宏“撤消”该宏的操作时,可以替换原始字符样式(粗体、斜体、默认段落字体)。

已解决:
这是我最终得出的解决方案:
Sub applyNewRevisedText
Dim r As Range ' Create a new Range object
Set r = Selection.Range ' Assign the current selection to the Range
Dim rng As Range
For Each rng In r.Words
Set rngStyle = rng.Style
Select Case rngStyle
Case "Bold"
rng.Style = ActiveDocument.Styles("New/Revised Text Bold")
Case "Italic"
rng.Style = ActiveDocument.Styles("New/Revised Text Emphasis")
Case Else
rng.Style = ActiveDocument.Styles("New/Revised Text")
End Select
Next rng
End Sub

最佳答案

回答你的直接问题

My question is: How can I overcome this bug/limitation and apply the character style ONLY within the selection/range?



这不满足需要吗?:
Sub restyleSelection()
Selection.Style = ActiveDocument.Styles("Emphasis")
End Sub

编辑:

好的,根据您的评论,例如:
Dim rng As Range
For Each rng In Selection.Words
If rng.Bold 'do something
Next rng

.Words 会将范围内的每个词分解为范围的集合。然后,您可以根据每个单词的当前样式对每个单词进行样式设置。

关于vba - 如何在 VBA 中的范围/选择中替换 Microsoft Word 字符样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8748240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com