我有一个VBA代码,旨在将范围的内容复制到图表中,以便能够将其导出到PNG文件(使用外部命令进行一些后处理) . 以下是相关部分:
Sub GenererImage() ' Entry point
getparams ' Collect parameters and define global variables
MiseEnPage.Range(ZoneImage).CopyPicture Appearance:=xlScreen,Format:=xlPicture
Application.DisplayAlerts = False
With ObjetGraphique.Duplicate
.Chart.Paste
.Chart.Export Filename:=CheminImage, Filtername:="PNG"
.Select
.Delete
End With
Application.DisplayAlerts = True
End Sub
在那里调用的getparams过程只是从另一个工作表中收集一些参数来定义:
-
"MiseEnPage":对我要复制的范围存在的工作表对象的引用,
-
"ZoneImage"设置为"B4:F11"字符串(指范围地址),
-
"ObjetGraphique"是对"MiseEnPage"工作表内ChartObject的引用 . 这个ChartObject是一个空容器(我主要用它来轻松设置宽度和高度) .
-
"CheminImage"是一个字符串,包含磁盘上图片文件名的路径 .
此代码过去在Excel 2010中完美运行 . 现在我的公司已部署Excel 2013,我的代码现在在 .Delete
行上失败,将ChartObject的副本(其中粘贴了范围图片)保留在工作表上并停止宏执行 .
我已经尝试过首先激活工作表,在删除它之前选择副本和其他东西,但无济于事 . 在调试器中跟踪执行时,它在删除行上发生错误,错误1004 .
我很沮丧地被困住了 . 任何线索?
2 回答
如果这样的话
我们必须假设With持有引用并阻止删除,或者选择对象调用的删除例程与ObjetGraphique.Duplicate.delete调用的删除例程不同,或者它是一个微妙的时间错误,并且检索所选对象所需的额外时间足以修复它 .
在使用对象模型进行大量调整之后,确定,这是我最终解决方案的(相关部分) . 非常感谢HarassedDad提供的线索 .
似乎发生的是Chart对象的.Paste方法在此对象的.Shapes集合中创建一个Shape . 我可以删除此Shape,但不能删除Chart本身或ChartObject . Excel 2010将允许,但不允许Excel 2013 .
我仍然不明白原因,但至少我有一些有用的东西(直到下一次excel更新可能......) .