Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 当格式:=xlBitmap时,Shape.CopyPicture失败(错误1004)_Excel_Vba_Copy Paste - Fatal编程技术网

Excel 当格式:=xlBitmap时,Shape.CopyPicture失败(错误1004)

Excel 当格式:=xlBitmap时,Shape.CopyPicture失败(错误1004),excel,vba,copy-paste,Excel,Vba,Copy Paste,我试图复制一个形状组,其中包含一些图表作为高分辨率图片。为了获得高分辨率,我使用选项外观:=xlPrinter和格式:=xlBitmap 运行时错误“1004”应用程序定义或对象定义错误 下面是我用来做这件事的代码 ws.Shapes.Range(Array("Chart 1", "Chart 2")).Group.Name = "temp_group" With ws.Shapes("temp_group") .CopyPicture Appearance:=xlPrinter, Fo

我试图复制一个形状组,其中包含一些图表作为高分辨率图片。为了获得高分辨率,我使用选项
外观:=xlPrinter
格式:=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
如果我只是删除
格式:=xlBitmap
或将其更改为
格式:=xlPicture
,则效果良好。MSDN帮助将
xlBitmap
显示为一个选项,我尝试使用2,但这会产生相同的错误

如果我在一张图表上尝试同样的方法,效果很好

ws.ChartObjects("Chart 1").Chart.CopyPicture Appearance:=xlPrinter, Format:=xlBitmap
将多个图表复制为高分辨率图片的最佳方式是什么?我希望避免保存这些图表,因为我需要复制/粘贴最多30个图表的多个组以导出到OneNote

编辑:


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

我在我的应用程序中也遇到了同样的问题。以下是解决方案:

  • 如果要复制MsoShapeType.msoChart或MsoShapeType.msoPicture类型的对象,请执行以下操作:
其中,
shape
当然是您的对象

首先,您需要放大对象(放大到图像的原始大小或图表的最大大小,这只是400%的缩放)。然后,将CopyPicture()方法与前面提到的参数一起使用,前面是Copy()*。最后要做的是缩小对象的比例(或者不缩小对象的比例,如果不保存此工作表的话)

*这里使用Copy()来消除常见错误和随机错误

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

如果打开任何Excel工作表,您将看到一些复制配置:

  • 普通拷贝只是(xlScreen,xlBitmap)
  • 高质量的拷贝是xlScreen,xlPicture),并且根据安装的打印机驱动程序,(xlPrinter)和(xlPrinter,xlPicture)
shape.copypicture在2016年excel中的表现不错。错误出现在office 360中。

此解决方案不适用于我。粘贴后,图片肯定更大,但分辨率没有提高。您在VBA中似乎也没有这样做,因为如果在行的末尾添加分号,并且在数字后面添加“f”也会导致错误,那么我会得到一个错误。
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);