Word,Paragraphs.Add不是return刚刚添加的段落
Word, Paragraphs.Add does not return the paragraph that has just been added
考虑这个 word 文档:
现在,下面的代码应该插入一个新段落,并使其成为选中的段落。
Sub Macro1()
Dim p As Paragraph
Set p = ActiveDocument.Content.Paragraphs.Add()
p.Range.Select
End Sub
相反,这是结果。实际上已经添加了一个新段落,但是它选择了上一个。
有点莫名其妙,因为无论你在哪里添加新的段落,都应该是最后选择的而不是之前的。
段落是一系列字符,包括段落符号。
要在现有段落之后插入一个段落,您需要将插入点放在现有段落符号之后。
这可以用于除最后一个段落之外的任何段落。对于最后一段,您只能走到其插入点之前:
Dim r As Range
' Suppose there are 10 paragraphs
Set r = ActiveDocument.Paragraphs(3).Range
r.Collapse wdCollapseEnd
r.Select ' Places the caret after the 3rd paragraph sign
Set r = ActiveDocument.Paragraphs.Last.Range
r.Collapse wdCollapseEnd
r.Select ' Places the caret before the last paragraph sign
这是不一致和烦人的,但这就是你得到的。
因此,在最后添加段落时,插入点将位于现有段落符号之前,因此新段落符号将占用旧段落的主体,成为倒数第二个。
所以你想要的只是插入后Set p = ActiveDocument.Content.Paragraphs.Last
。
考虑这个 word 文档:
现在,下面的代码应该插入一个新段落,并使其成为选中的段落。
Sub Macro1()
Dim p As Paragraph
Set p = ActiveDocument.Content.Paragraphs.Add()
p.Range.Select
End Sub
相反,这是结果。实际上已经添加了一个新段落,但是它选择了上一个。
有点莫名其妙,因为无论你在哪里添加新的段落,都应该是最后选择的而不是之前的。
段落是一系列字符,包括段落符号。
要在现有段落之后插入一个段落,您需要将插入点放在现有段落符号之后。
这可以用于除最后一个段落之外的任何段落。对于最后一段,您只能走到其插入点之前:
Dim r As Range
' Suppose there are 10 paragraphs
Set r = ActiveDocument.Paragraphs(3).Range
r.Collapse wdCollapseEnd
r.Select ' Places the caret after the 3rd paragraph sign
Set r = ActiveDocument.Paragraphs.Last.Range
r.Collapse wdCollapseEnd
r.Select ' Places the caret before the last paragraph sign
这是不一致和烦人的,但这就是你得到的。
因此,在最后添加段落时,插入点将位于现有段落符号之前,因此新段落符号将占用旧段落的主体,成为倒数第二个。
所以你想要的只是插入后Set p = ActiveDocument.Content.Paragraphs.Last
。