当Format:= xlBitmap

时间:2018-04-25 11:40:14

标签: excel excel-vba copy-paste vba

我正在尝试复制包含一些图表作为高分辨率图片的形状组。为了实现高分辨率,我使用选项Appearance:= xlPrinter和Format:= xlBitmap。

  

运行时错误' 1004'

     

应用程序定义或对象定义的错误

我用来执行此操作的代码位于

之下
ws.Shapes.Range(Array("Chart 1", "Chart 2")).Group.Name = "temp_group"
With ws.Shapes("temp_group")
    .CopyPicture Appearance:=xlPrinter, Format:=xlBitmap
    .Ungroup
End With

如果我只删除Format:= xlBitmap或将其更改为Format:= xlPicture,它可以正常工作。 MSDN帮助显示xlBitmap作为一个选项,我尝试使用2,但这会产生相同的错误。

如果我在一张图表上尝试相同的操作,它就可以正常工作。

ws.ChartObjects("Chart 1").Chart.CopyPicture Appearance:=xlPrinter, Format:=xlBitmap

将多个图表复制为高分辨率图片的最佳方法是什么?我想避免保存它们,因为我需要复制/粘贴多达30个图表的多个组才能导出到OneNote。

编辑:

经过一些额外的测试后,如果外观选项设置为xlScreen而不是xlPrinter,则可以使用xlBitmap。但是,分辨率仍然非常糟糕。这非常令人沮丧,因为手动复制/粘贴这些相同的图表会给出非常漂亮的清晰图片,但由于某种原因,VBA只会破坏它。 VBA是必需的,因为否则这将是一个非常耗时的过程。

2 个答案:

答案 0 :(得分:0)

shape.copypicture在Excel 2016中可以正常工作。错误在Office 360​​中出现。

答案 1 :(得分:-1)

我在应用中遇到了同样的问题。解决方法如下:

  • 如果要复制MsoShapeType.msoChart或MsoShapeType.msoPicture类型的对象,请执行以下操作:
shape.ScaleHeight(2.5f, MsoTriState.msoFalse);
shape.ScaleWidth(2.5f, MsoTriState.msoFalse);
shape.Copy();
shape.CopyPicture(Excel.XlPictureAppearance.xlScreen, Excel.XlCopyPictureFormat.xlPicture);
shape.ScaleHeight(0.4f, MsoTriState.msoFalse);
shape.ScaleWidth(0.4f, MsoTriState.msoFalse);

shape当然是您的对象。

首先,您需要按比例放大对象(按原始比例缩放到图像的原始大小或图表的最大大小(缩放比例仅为400%)是无损的)。然后,使用带有上述参数的CopyPicture()方法,并以Copy()*开头。最后要做的是缩小对象(如果不保存此工作表,则不缩放)。

* Copy()用于消除常见和随机错误

  

System.Runtime.InteropServices.COMException(0x800A03EC):范围类的CopyPicture方法失败

如果打开任何Excel工作表,您将看到一些副本配置: link, because I can't add images yet

  • 普通副本就是(xlScreen,xlBitmap);
  • 高质量的副本是xlScreen,xlPicture),根据安装的打印机驱动程序,是(xlPrinter)和(xlPrinter,xlPicture);