我尝试使用vba将单词样式应用于文本行,以便它出现在目录中。 虽然由于某种原因整个文档正在采用这种风格,但我无法保持相关行中包含的样式。
With Selection
.TypeText Text:=headername ' This is defined previously,
.HomeKey Unit:=wdLine, Extend:=wdMove ' This is to move the cursor to the start of the line
.Expand wdLine ' This is to select the whole line
.Style = "Heading 2" ' this is to define the style of the selected text
.EndKey Unit:=wdLine, Extend:=wdMove ' This is to unhighlight the text
.InsertBreak Type:=wdLineBreak ' This is to create a line break
End With
出于某种原因,整个文件都会提到"标题2"因为它的风格。 我尝试了无数其他方法,但没有运气,
有没有人知道更好的方法,或者看看我哪里出错?
由于
答案 0 :(得分:2)
仅可以将段落样式应用于文本行。它必须应用于段落。有时候,一个段落只占用一行,在您的场景中可能就是这种情况 - 但识别差异非常重要。
您的代码存在的问题是,根据执行操作的顺序,插入中断会获取样式格式并继续执行。
使用Word的RANGE对象而不是当前的选择更加高效和清晰。您可以使用选择作为起点,但从那时起,您的代码应该依赖于更可预测的范围(同样,用户也不会看到事情"跳转")。例如:
Dim rng as Word.Range
Set rng = Selection.Range
rng.Text = headername & vbCr 'Insert the new para at same time
Set rng = rng.Paragraphs(1).Range 'Only the first para
rng.Style = Word.WdBuiltinStyle.wdStyleHeading2 'language independent
rng.Collapse Word.WdCollapseDirection.wdCollapseEnd
'focus in new para, which has different formatting