在Excel 2013中删除图表对象的副本的VBA失败

我有一个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”string(指范围地址),
  • “ObjetGraphique”是对“MiseEnPage”表内的ChartObject的引用。 这ChartObject是一个空的容器(我主要用它来轻松设置宽度和高度)。
  • “CheminImage”是一个包含磁盘上图片文件名path的string。

此代码用于在Excel 2010中完美工作。现在我的公司已经部署了Excel 2013,现在,我的代码在.Delete行上失败,在.Delete留下ChartObject副本(粘贴范围图片)并停止macros执行。

我曾尝试先激活工作表,select重复删除它之前和其他事情,无济于事。 在debugging器中跟踪执行时,它会在错误1004的删除行上窒息。

我很沮丧地卡住了。 任何线索?

如果这个工作

  With ObjetGraphique.Duplicate .Chart.Paste .Chart.Export Filename:=CheminImage, Filtername:="PNG" .Select End With Selection.Delete 

我们必须假定With是持有引用并阻止删除,或者select对象调用的删除例程与ObjetGraphique.Duplicate.delete调用的删除例程不同,或者它是一个微妙的时间错误,检索所选对象所花费的额外时间足以解决这个问题。

好了摆弄了很多对象模型之后,这里是(我的最终解决scheme的相关部分)。 非常感谢HarassedDad的线索。

 Sub GenererImage() ' Point d'entrée getparams MiseEnPage.Range(ZoneImage).CopyPicture Appearance:=xlScreen, Format:=xlPicture Application.DisplayAlerts = False With ObjetGraphique .Chart.Paste .Chart.Export filename:=CheminImage, Filtername:="PNG" .Chart.Shapes(1).Delete End With Application.DisplayAlerts = True End Sub 

看起来会发生的是Chart对象的.Paste方法在该对象的.Shapes集合中创build一个Shape。 我可以删除这个Shape,但不是Chart本身或ChartObject。 Excel 2010将允许,但不是Excel 2013。

我仍然不明白原因,但至less我有一些工作(直到下一个Excel更新可能…)。

Interesting Posts