Excel 将OLEObject中的所有内容(包括页眉页脚)复制到新的Word.Document/Word.Application中

Excel 将OLEObject中的所有内容(包括页眉页脚)复制到新的Word.Document/Word.Application中,excel,vba,ms-word,Excel,Vba,Ms Word,最近,我设法在VBA中实现自动化,其中打开了与excel文件位于同一文件夹中的外部word文件,并从excel中添加新内容,然后另存为不同名称的word文件。代码如下: Dim wordapp As Word.Application Dim wordfile As Word.Document Set wordapp = New Word.Application Set wordfile = wordapp.Documents.Open(Application.ActiveWorkbook.Pat

最近,我设法在VBA中实现自动化,其中打开了与excel文件位于同一文件夹中的外部word文件,并从excel中添加新内容,然后另存为不同名称的word文件。代码如下:

Dim wordapp As Word.Application
Dim wordfile As Word.Document
Set wordapp = New Word.Application
Set wordfile = wordapp.Documents.Open(Application.ActiveWorkbook.Path & "<word file name>")

wordapp.Visible = False
<code to manipulate the word.document to insert value and graph from excel>
wordfile.SaveAs Filename:=Application.ActiveWorkbook.Path & "<new word file name>"
wordapp.Quit
Set wordapp = Nothing
Set wordfile = Nothing
Dim objSampleReport As OLEObject
Dim wordAppEmbed As Word.Application
Dim wordAppNew As Word.Application
Dim wordFileEmbed As Word.Document
Dim wordFileNew As Word.Document

Set objSampleReport = pgReport.OLEObjects("objSampleReport")
objSampleReport.Verb xlVerbPrimary
Set wordAppEmbed = objSampleReport.Object.Application
Set wordAppNew = New Word.Application
Set wordFileNew = wordAppNew.Documents.Add

wordAppEmbed.Activate
wordAppEmbed.Selection.WholeStory
wordAppEmbed.Selection.Copy
wordAppNew.Activate
wordAppNew.Selection.PasteAndFormat

wordAppEmbed.Quit False

<code to manipulate the word.document to insert value and graph from excel using wordApp.selection>
有了这些新知识,我试着想出与上面类似的东西。代码如下:

Dim wordapp As Word.Application
Dim wordfile As Word.Document
Set wordapp = New Word.Application
Set wordfile = wordapp.Documents.Open(Application.ActiveWorkbook.Path & "<word file name>")

wordapp.Visible = False
<code to manipulate the word.document to insert value and graph from excel>
wordfile.SaveAs Filename:=Application.ActiveWorkbook.Path & "<new word file name>"
wordapp.Quit
Set wordapp = Nothing
Set wordfile = Nothing
Dim objSampleReport As OLEObject
Dim wordAppEmbed As Word.Application
Dim wordAppNew As Word.Application
Dim wordFileEmbed As Word.Document
Dim wordFileNew As Word.Document

Set objSampleReport = pgReport.OLEObjects("objSampleReport")
objSampleReport.Verb xlVerbPrimary
Set wordAppEmbed = objSampleReport.Object.Application
Set wordAppNew = New Word.Application
Set wordFileNew = wordAppNew.Documents.Add

wordAppEmbed.Activate
wordAppEmbed.Selection.WholeStory
wordAppEmbed.Selection.Copy
wordAppNew.Activate
wordAppNew.Selection.PasteAndFormat

wordAppEmbed.Quit False

<code to manipulate the word.document to insert value and graph from excel using wordApp.selection>
Dim objSampleReport作为对象
暗淡的单词显示为Word.Application
Dim wordAppNew作为Word.Application
Dim Word文件嵌入为Word.Document
Dim wordFileNew作为Word.Document
设置objSampleReport=pgReport.OLEObjects(“objSampleReport”)
objSampleReport.Verb xlVerbPrimary
Set-wordAppEmbed=objSampleReport.Object.Application
Set wordAppNew=New Word.Application
设置wordFileNew=wordAppNew.Documents.Add
wordAppEmbed。激活
单词appembed.Selection.wholentory
wordAppEmbed.Selection.Copy
wordAppNew.Activate
wordAppNew.Selection.PasteAndFormat
wordAppEmbed。退出False
<使用wordApp.selection操作word.document以插入excel中的值和图形的代码>
但这仍然导致页眉页脚未被复制粘贴,格式仍然错误。我尝试使用.PasteAndFormat类型参数,但结果仍然相同


有人能帮我解决这个问题吗?我的另一个选择是将模板用作外部word文件并使用第一个代码,但这需要我同时发送excel文件和word文件,如果用户仅复制excel文件,则可能会发生人为错误。

可能会尝试与以下代码一致的操作

Sub NewTest()
Dim objSampleReport As OLEObject
Dim wordAppEmbed As Word.Application
'Dim wordAppNew As Word.Application
Dim wordFileEmbed As Word.Document
Dim wordFileNew As Word.Document
Dim pgReport As Worksheet
Set pgReport = ThisWorkbook.Sheets("Sheet1")  'Used for test purpose. May Use your choice

Set objSampleReport = pgReport.OLEObjects("Object 2") 'Used for test purpose. Use use choice

objSampleReport.Verb xlOpen
Set wordAppEmbed = objSampleReport.Object.Application
Set wordFileEmbed = wordAppEmbed.ActiveDocument
Set wordFileNew = wordAppEmbed.Documents.Add
wordFileEmbed.Content.Copy
wordFileNew.Range.Paste
wordFileEmbed.Close
' Now may Work with wordFileNew for further processing New file
End Sub

编辑正如@Cindy Meister的专家意见和有价值的评论所建议的那样,我也觉得首先将嵌入的文档保存为新文件,然后打开该文档是更谨慎的选择。我的最后一段代码只是试图让您的代码工作,并仅在简单的模板上进行测试。(对于复杂的文档,它可能会失败)。因此,我根据@Cindy Meister的评论发布修改后的代码

Sub NewTest2()
Dim objSampleReport As OLEObject
Dim wordAppEmbed As Word.Application
Dim wordFileEmbed As Word.Document
Dim wordFileNew As Word.Document
Dim pgReport As Worksheet, Fname As String
Set pgReport = ThisWorkbook.Sheets("Sheet1") 'Modify to your choice
Fname = "C:\users\user\Desktop\Test2.docx"   'Modify to your choice

Set objSampleReport = pgReport.OLEObjects("Object 2") 'Used for test purpose. May modify to your choice
objSampleReport.Verb xlOpen
Set wordAppEmbed = objSampleReport.Object.Application
Set wordFileEmbed = wordAppEmbed.ActiveDocument
wordFileEmbed.SaveAs Fname
wordFileEmbed.Close
Set wordFileNew = wordAppEmbed.Documents.Open(Fname)

' Now may Work with wordFileNew for further processing New file

End Sub

.

我的建议是不要更改嵌入的Word文件,而是先将其另存为新文件,然后在Word应用程序的新实例中打开该文件并更改该文件。这样就不会有更改“模板”的危险。保存然后再调用它,嗯?为什么我没有想到。。。我将首先尝试@Ahmed AU solution正如@Cindy Meister的专家意见和宝贵意见所建议的那样,我还认为首先将嵌入的文档保存为新文件,然后打开该文档是更谨慎的选择。。我正在根据建议添加修改后的代码。实际上,您的第一个代码确实可以按照我的问题工作。不过,我确实认为,从长远来看,先将文件保存为外部文件更好。。。我会记下这个作为我的答案