我在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行,其中每行可以具有特定(不相同)的样式?
答案 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