VBA 删除图表对象的重复副本在 Excel 2013 年失败

VBA deleting a duplicate copy of chart object fails in Excel 2013

我有一个 VBA 代码,用于将范围的内容复制到图表中,以便能够将其导出到 PNG 文件(+一些 post-使用外部命令)。这是相关部分:

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过程只是从另一个worksheet收集一些参数来定义:

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

我试过先激活作品sheet,在删除之前选择副本和其他东西,但无济于事。在调试器中跟踪执行时,它在删除行上阻塞并出现错误 1004。

我很沮丧地卡住了。有什么线索吗?

如果可行

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

我们必须假设 With 持有引用并阻止删除,或者选择对象调用的删除例程与 ObjetGraphique.Duplicate.delete 调用的删除例程不同,或者它是一个微妙的计时错误,并且检索所选对象所需的额外时间足以修复它。

OK 在摆弄了很多对象模型之后,这是我最终解决方案的(相关部分)。非常感谢 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 集合中创建了一个 Shape。我可以删除此形状,但不能删除图表本身或图表对象。 Excel 2010 年允许,但 Excel 2013 年不允许。

我仍然不明白其中的原因,但至少我有一些有用的东西(直到下一次 excel 更新可能...)。