【发布时间】:2020-01-27 21:24:37
【问题描述】:
在 Excel 中,我有大约 20 张表,每张表中有 20 个图表,我需要将它们复制/粘贴到 Word 文档中。每个 Excel 工作表一个 Word 文档。我发现this article 有一个解决方案,我将其修改为接受一个 ChartObject 作为参数,这样我就不必考虑正在复制哪个图表。我在 CopyChart2Word() 函数中调用 PasteSpecial 的最后一行收到以下运行时错误:
这不是很有帮助,因为它没有告诉我哪里出了问题。但是图表被粘贴到 Word 文档中,缺少一半的数据点。
代码:
Public Function moveCharts()
Dim i As Integer
Dim name As String
Dim ChtObj As ChartObject
Dim dummy As Variant
initGlobals
For i = 0 To UBound(employees)
name = employees(i)
For Each ChtObj In Worksheets(name).ChartObjects
dummy = CopyChart2Word(ChtObj)
Next ChtObj
Next i
End Function
Public Function CopyChart2Word(chartObj As ChartObject)
Dim wd As Object
Dim ObjDoc As Object
Dim FilePath As String
Dim FileName As String
FilePath = "C:\Users\name\Desktop"
'Empty document for now
FileName = "Template.docx"
'check if template document is open in Word, otherwise open it
On Error Resume Next
Set wd = GetObject(, "Word.Application")
If wd Is Nothing Then
Set wd = CreateObject("Word.Application")
Set ObjDoc = wd.Documents.Open(FilePath & "\" & FileName)
Else
On Error GoTo notOpen
Set ObjDoc = wd.Documents(FileName)
GoTo OpenAlready
notOpen:
Set ObjDoc = wd.Documents.Open(FilePath & "\" & FileName)
End If
OpenAlready:
On Error GoTo 0
'find Bookmark in template doc
wd.Visible = True
'ObjDoc.Bookmarks("Bookmark1").Select
'copy chart from Excel
chartObj.chart.ChartArea.Copy
'insert chart to Bookmark in template doc
'wdPasteMetafilePicture didn't work so I used the numeric value 3
'wdInLine didn't work so I used the numeric value 0
wd.Selection.PasteSpecial Link:=False, _
DataType:=3, _
Placement:=0, _
DisplayAsIcon:=False
End Function
链接到sample chart。
【问题讨论】:
-
当您收到错误并单击调试时,可能包括突出显示的行?仅供参考,大多数人不会从您的谷歌驱动器下载文件。
-
A minimal reproducible example - 包含在问题中 - 会很有用...
标签: excel vba ms-word copy-paste