我正在开发一个带有宏的 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 查找/替换工具时的行为相同。
我的问题是:我怎样才能克服这个错误/限制并应用字符样式ONLY在选择/范围内?
更多信息:
我真正需要宏做的是将某些格式应用于整个选择,同时保持选择中现有的字符样式。例如,如果所选文本包含粗体字符样式、斜体字符样式,其余部分为默认段落字体,则宏应将粗体替换为“修订粗体”,将“斜体”替换为“修订斜体”,然后将“默认段落字体”替换为“修订版”。这样,当我使用配套宏“撤消”该宏的操作时,可以替换原始字符样式(粗体、斜体、默认段落字体)。
SOLVED:
这是我最终得出的解决方案:
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
回答你的直接问题
我的问题是:我怎样才能克服这个错误/限制并应用
字符样式仅在选择/范围内?
这不符合需求吗?:
Sub restyleSelection()
Selection.Style = ActiveDocument.Styles("Emphasis")
End Sub
EDIT:
好的,根据您的评论,怎么样:
Dim rng As Range
For Each rng In Selection.Words
If rng.Bold 'do something
Next rng
.Words 会将范围中的每个单词分解为范围的集合。然后,您可以根据每个单词当前的样式对其进行样式设置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)