将内容从一个文档复制到另一个文档时出现 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
我正在尝试将 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