我正在尝试复制包含一些图表作为高分辨率图片的形状组。为了实现高分辨率,我使用选项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是必需的,因为否则这将是一个非常耗时的过程。
答案 0 :(得分:0)
shape.copypicture在Excel 2016中可以正常工作。错误在Office 360中出现。
答案 1 :(得分:-1)
我在应用中遇到了同样的问题。解决方法如下:
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