VBA Word - 将样式应用于一行文本

时间:2015-11-30 14:39:53

标签: vba ms-word word-vba word-style

我尝试使用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"因为它的风格。 我尝试了无数其他方法,但没有运气,

有没有人知道更好的方法,或者看看我哪里出错?

由于

1 个答案:

答案 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