2014-04-04 56 views
4

我知道我的问题可能听起来很琐碎,但我无法找到解决方案......我已经筋疲力尽了。复制并粘贴excel图表,用word中的VBA宏

我正在写一个宏来自动化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'使用剪贴板,但我似乎只能使用文本(或字符串)。据我所知,我拥有所有必需的东西,但显然缺少一些东西。

有什么想法?

+0

欢迎来到Stack Overflow!我提出了你的问题,但下一次尽量避免在帖子末尾张贴“谢谢” - 这里的准则试图使问题尽可能清晰和简明。我为你编辑了那部分:)再次,欢迎来到SO! –

回答

3

如果你让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应用程序和清洁内存退出。

+0

太好了。现在正在工作。哇,从我的角度来说很愚蠢。 'chart.ChartArea.Copy'解决了它!谢谢 – p929