使用Document.Paragraphs.Add()创建多个Word段落

时间:2018-05-01 18:11:51

标签: vba excel-vba ms-word excel

我在Excel中使用宏来向Word文档添加信息。我试图在现有的Word文档中添加10行:

Sub AddParagraphs()

    'Open Word
    Dim wordApp As Word.Application
    Set wordApp = CreateObject("Word.Application")

    'Open
    Dim doc As Word.document
    Set doc = wordApp.Documents.Open("c:\temp\document.docx")

    'Add 10 paragraphs
    Dim idx As Integer
    For idx = 1 To 10

        Dim paragraph As Word.paragraph
        Set paragraph = doc.Paragraphs.Add()

        paragraph.Range.style = wdStyleHeading2
        paragraph.Range.text = "Paragraph " & CStr(idx)

    Next

    doc.Save

    doc.Close
    wordApp.Quit

End Sub

我在C:\ temp \ document.docs中有一个空的Word文档,但是在运行代码后,只有一行包含文本"段落10"。我期待10行。

据我所知,没有参数的Paragraphs.Add()应该创建一个新的段落。或许我错误地认为一个新的段落产生了新的一条线?是否有另一种方法可以在循环中添加10行,其中每行可以具有特定(不相同)的样式?

4 个答案:

答案 0 :(得分:3)

实际上,原始代码中发生的事情是您在使用

时始终替换内容
Doc.Paragraphs.Add

所以只有一个段落。有各种方法来解决这个问题。一种是使用InsertAfter,正如评论中提到的那样。 (请注意,如果您要使用此功能,将新段落指定为字符串一部分的正确方法是vbCr或Chr(13).Word很容易误解其他任何内容!)

我个人的偏好是使用Range对象,可以独立于整个文档进行操作。例如,它可以这样做:

Sub AddParagraphs()

    'Open Word
    Dim wordApp As Word.Application
    Set wordApp = CreateObject("Word.Application")

    'Open
    Dim doc As Word.document
    Set doc = wordApp.Documents.Open("c:\temp\document.docx")
    Dim rng as Word.Range
    Set rng = doc.Content

    'Add 10 paragraphs
    Dim idx As Integer
    For idx = 1 To 10

        Dim paragraph As Word.paragraph
        'So that the next thing inserted follows instead of replaces
        rng.Collapse wdCollapseEnd           
        Set paragraph = rng.Paragraphs.Add

        paragraph.Range.style = wdStyleHeading2
        paragraph.Range.text = "Paragraph " & CStr(idx)
     Next

    doc.Save

    doc.Close
    wordApp.Quit

End Sub

答案 1 :(得分:1)

您要添加的“段落”末尾没有段落标记。

将该行更改为

paragraph.Range.Text = "Paragraph " & CStr(idx) & vbCr

这应该可以解决你的问题。

答案 2 :(得分:1)

我有类似的问题。添加doc.Range.InsertParagraphAfter解决了我的问题。以下代码将为您工作:

Sub AddParagraphs()

    'Open Word
    Dim wordApp As Word.Application
    Set wordApp = CreateObject("Word.Application")

    'Open
    Dim doc As Word.document
    Set doc = wordApp.Documents.Open("c:\temp\document.docx")

    'Add 10 paragraphs
    Dim idx As Integer
    For idx = 1 To 10

        Dim paragraph As Word.paragraph
        Set paragraph = doc.Paragraphs.Add()

        paragraph.Range.style = wdStyleHeading2
        paragraph.Range.text = "Paragraph " 

        doc.Range.InsertParagraphAfter

    Next

    doc.Save

    doc.Close
    wordApp.Quit

End Sub

答案 3 :(得分:0)

Paragraphs.Add方法仅在文档末尾附加一个新的段落,该段落由段落标记组成。奇怪的是,返回值不是最后一段,而是倒数第二段。您可以通过段落对象的Next方法来引用新的最后一段。然后,您可以设置样式并使用paragraph.Range.InsertBefore方法插入文本。

代码的关键部分必须是这样

'Add 10 paragraphs
 Dim idx As Integer
 Dim paragraph As word.paragraph
 For idx = 1 To 10
   Set paragraph = doc.Paragraphs.Add.Next
   paragraph.Range.style = word.WdBuiltinStyle.wdStyleHeading2
   paragraph.Range.InsertBefore "Paragraph " & CStr(idx)
 Next