将图表导出为图像有时会生成空文件 - Excel VBA

Spl*_*nia 4 excel vba excel-vba

我正在做一个导出工作表中所有图表的宏,然后打开Outlook并附加它们.但是,我注意到,有几次图表会导出但是为0KB(文件已创建,但无法看到图像) 在此输入图像描述

但它并没有发生在所有的图表上.只是大部分时间,有时候,它们都会毫无问题地生成它们.(当我逐步执行代码时,所有图表生成都没有问题,也是在逐步执行之后,然后我正常执行它并生成所有图表,但是如果我关闭并重新打开工作簿,它会产生同样的问题,仅生成两个,其余为空文件)

这是代码:

Dim sheetNumber, Size, i As Integer
    Dim chartNames(), FNames() As String
    Dim objChrt As ChartObject
    Dim myChart As Chart


    'Activate Charts Sheet
    Sheets("GRAFICAS").Activate
    'Calculate Number of Charts in Sheet
    Dim chartNumber
    chartNumber = ActiveSheet.ChartObjects.Count
    'Redimension Arrays to fit all Chart Export Names
    ReDim chartNames(chartNumber)
    ReDim FNames(chartNumber)
    'Loops through all the charts in the GRAFICAS sheet
    For i = 1 To chartNumber
        'Select chart with index i
        Set objChrt = ActiveSheet.ChartObjects(i)
        Set myChart = objChrt.Chart
        'Generate a name for the chart
        chartNames(i) = "myChart" & i & ".png"

        On Error Resume Next
        Kill ThisWorkbook.Path & "\" & chartNames(i)
        On Error GoTo 0
        'Export Chart
        myChart.Export FileName:=Environ$("TEMP") & "\" & chartNames(i), Filtername:="PNG"
        'Save path to exported chart
        FNames(i) = Environ$("TEMP") & "\" & chartNames(i)
    Next i
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Spl*_*nia 6

事实证明,这是Excel 2010-2013用户的随机错误.然而,经过一些更多的谷歌搜索.我在这里遇到了答案

你只需要添加

objChrt.Activate
Run Code Online (Sandbox Code Playgroud)

选择图表后.所以在我的情况下,最终的代码如下所示:

 For i = 1 To chartNumber
        'Select chart with index i
        Set objChrt = ActiveSheet.ChartObjects(i)
        objChrt.Activate
        Set myChart = objChrt.Chart
        'Generate a name for the chart
        chartNames(i) = "myChart" & i & ".png"

        On Error Resume Next
        Kill ThisWorkbook.Path & "\" & chartNames(i)
        On Error GoTo 0
        'Export Chart
        myChart.Export FileName:=Environ$("TEMP") & "\" & chartNames(i), Filtername:="PNG"
        'Save path to exported chart
        'Application.Wait (Now + #12:00:01 AM#)
        FNames(i) = Environ$("TEMP") & "\" & chartNames(i)
    Next i
Run Code Online (Sandbox Code Playgroud)