将内容从一个文档复制到另一个文档时出现 Word 宏错误

Word macro error while copying contents from one document to another

我正在尝试将 doc1 内容(格式化文本和图像)复制到 doc2 中,其中 doc2 包含表格,我想将 doc1 的内容复制到 doc2 中的第 18 个单元格中。

我从下面的参考资料中获得了代码并相应地对其进行了一些修改。工作代码如下:

参考 Link:

Sub copyContents()
    Dim wordWasRunning As Boolean
    wordWasRunning = IsMSWordRunning()

    Dim mswApp As Word.Application
    Set mswApp = AttachToMSWordApplication()

    Dim doc1 As Word.Document
    Dim doc2 As Word.Document
    Set doc1 = mswApp.Documents.Open("C:\Temp\SingleDoc.docx")
    Set doc2 = mswApp.Documents.Open("C:\Temp\MergedDoc.docx")
    
    Dim destination As Word.Range
    Dim source As Word.Range
    
    Set source = doc1.Content
    Set destination = doc2.Content
    
    destination.Tables(1).Range.Cells(18).Range.FormattedText = source
    
    doc2.Close SaveChanges:=True
    doc1.Close

    If Not wordWasRunning Then
        mswApp.Quit
    End If
End Sub

当我使用不同的 window 并尝试将内容从 doc1 复制到 doc2(并且我从 doc3 中 运行 宏)时,上面的代码有效。

问题: 我试图修改代码,以便我可以 运行 来自 doc2 本身的宏。但是修改后的代码(如下所述)导致了错误。

修改后的代码:

Sub copyContents()
    Dim wordWasRunning As Boolean
    wordWasRunning = IsMSWordRunning()
    Dim mswApp As Word.Application
    Set mswApp = AttachToMSWordApplication()
    
    Dim doc1 As Word.Document
    Set doc1 = mswApp.Documents.Open("C:\Temp\SingleDoc.docx")
    
    Dim source As Word.Range
    Set source = doc1.Content
    
    ActiveDocument.Tables(1).Range.Cells(18).Range.FormattedText = source
    
End Sub

错误:

Error 5941: The Requested Member of the Collection Does Not Exist

*导致错误的行:ActiveDocument.Tables(1).Range.Cells(18).Range.FormattedText = source 我试图将上面的行更改为以下试验(只是为了使其尽可能接近工作代码)但是我得到了同样的错误(错误 5941)

试验 1:

ActiveDocument.Content.Tables(1).Range.Cells(18).Range.FormattedText = source

试验 2:

ActiveDocument.Range.Tables(1).Range.Cells(18).Range.FormattedText = source

谁能帮我解决这个问题?

谢谢, 维奈

首先,您的代码不是 运行 从 Word 编写的。如果您在 Word 中 运行ning 它,那么前四行代码是完全不必要的,因为 Word 显然是 运行ning.

Dim wordWasRunning As Boolean
wordWasRunning = IsMSWordRunning()
Dim mswApp As Word.Application
Set mswApp = AttachToMSWordApplication()

其次,Set doc1 = Documents.Open("C:\Temp\SingleDoc.docx") 使 doc1 成为活动文档,正如您只需查看屏幕即可看到的那样。这是 ActiveDocument 需要非常小心使用的原因之一。如果您 运行 从目标文档中获取代码,则可以改用 ThisDocument

Sub copyContents()
   
    Dim doc1 As Word.Document
    Set doc1 = Documents.Open("C:\Temp\SingleDoc.docx")
    
    Dim source As Word.Range
    Set source = doc1.Content
    
    ThisDocument.Tables(1).Range.Cells(18).Range.FormattedText = source.FormattedText
    doc1.Close
    
End Sub

或者,您可以使用变量来明确引用目标文档。

Sub copyContents()
   
    Dim docTarget As Word.Document
    Set docTarget = ActiveDocument
    Dim docSource As Word.Document
    Set docSource = Documents.Open("C:\Temp\SingleDoc.docx")
    
    docTarget.Tables(1).Range.Cells(18).Range.FormattedText = docSource.Content.FormattedText
    docSource.Close
    
End Sub