复制并粘贴带有VBA宏的Excel图表

时间:2014-04-04 19:44:41

标签: excel-vba word-vba vba excel

我知道我的问题可能听起来很简单,但我无法在任何地方找到解决方案......而且我已经筋疲力尽。

我正在编写一个宏来自动化Word中的报告生成。在某个阶段,我需要插入一些图表,它位于excel的图表表中......但没办法。这是我的代码

Sub copy_pic_excel()
Dim xlsobj_2 As Object
Dim xlsfile_chart As Object
Dim chart As Object

Set xlsobj_2 = CreateObject("Excel.Application")
xlsobj_2.Application.Visible = False
Set xlsfile_chart = xlsobj_2.Application.Workbooks.Open("path_to_file.xlsx")

Set chart = xlsfile_chart.Charts("sigma_X_chart")
chart.Select
chart.Copy
With Selection
.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _
Placement:=wdInLine, DisplayAsIcon:=False
End With
End Sub

但它会一直显示错误消息:"运行时错误' 5342':指定的数据类型不可用。"

我不知道为什么它没有粘贴图表。我想通过' MSForms.DataObject'来使用剪贴板,但我似乎只适用于文本(或字符串)。据我所知,我拥有所需的一切,但显然缺少了一些东西。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

如果您使Excel应用程序可见xlsobj_2.Application.Visible = True,您可以看到实际发生的情况:当您执行此行chart.Copy时,它只是将图表工作表复制到新工作簿中。要解决此问题,请改为使用chart.ChartArea.Copy

Sub copy_pic_excel()
    Dim xlsobj_2 As Object
    Dim xlsfile_chart As Object
    Dim chart As Object

    Set xlsobj_2 = CreateObject("Excel.Application")
    xlsobj_2.Application.Visible = False
    Set xlsfile_chart = xlsobj_2.Application.Workbooks.Open("path_to_file.xlsx")

    Set chart = xlsfile_chart.Charts("sigma_X_chart")
    chart.Select
    chart.ChartArea.Copy
    With Selection
       .PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _
            Placement:=wdInLine, DisplayAsIcon:=False
    End With

    'clean up
    Set xlsfile_chart = Nothing
    xlsobj_2.Quit
    Set xlsobj_2 = Nothing
End Sub

另请注意,我已添加清理部分代码以退出excel应用程序并清理内存。