0

我正在尝试使用 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”作为它的风格。我尝试了无数其他方法来做到这一点,但没有运气,

有谁知道这样做的更好方法,或者看看我哪里出错了?

谢谢

4

1 回答 1

6

不能仅将段落样式应用于一行文本。它必须应用于段落。有时,一个段落只占一行,就像您的场景中的情况一样 - 但识别差异很重要。

您的代码的问题在于,考虑到它执行操作的顺序,插入中断是拾取样式格式并将其向前推进。

更有效和更清晰的是使用 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
于 2015-11-30T16:10:11.520 回答