Excel 宏图表创建仅在单步执行调试器时正确执行

Excel Macro Chart creation executes corectly only when stepping through debugger

所以我的 Excel 宏有一个诱发压力的问题。当我 运行 根据一些 table 数据创建图表的代码时,它中断说创建第六个系列时出错但是当我在调试器中单步执行代码时它 运行 完美!下面是我的方法有问题还是我不​​知道的另一个问题。

图表代码如下:

Sub staffing_Chart()
    Dim staffChart
    Set staffChart = ActiveWorkbook.Worksheets("2015   Chart").ChartObjects.Add(Left:=175, Width:=500, Top:=350, Height:=325)
    With staffChart.Chart
        .ChartType = xlAreaStacked
        .HasTitle = True
        .ChartTitle.Text = "All Geo Int Staffing"
        .SetSourceData Source:=Range("B5:G30")
        .FullSeriesCollection(1).Name = "='2015 Chart'!$B"
        .FullSeriesCollection(1).XValues = "='2015 Chart'!$A:$A"
        .FullSeriesCollection(2).Name = "='2015 Chart'!$C"
        .FullSeriesCollection(3).Name = "='2015 Chart'!$D"
        .FullSeriesCollection(4).Name = "='2015 Chart'!$E"
        .FullSeriesCollection(5).Name = "='2015 Chart'!$F"
        .FullSeriesCollection(6).Name = "='2015 Chart'!$G"
        .Axes(xlCategory).CategoryType = xlCategoryScale
        .Axes(xlCategory).CrossesAt = 1
        .Axes(xlCategory).Crosses = xlAutomatic
        .Axes(xlCategory).TickMarkSpacing = 5
        .Axes(xlCategory).TickLabelSpacing = 5
        .Axes(xlCategory).TickLabels.NumberFormat = "m/d/yyyy"
        .Axes(xlCategory).TickLabels.NumberFormat = "[$-409]mmm-yy;@"
        .Axes(xlCategory).TickLabels.NumberFormat = "[$-409]mmm;@"
    End With
End Sub

这里是 table:

编辑

为了回答您的建议,Scott 使用您的代码,我在 运行 正常

时得到了这张图表

但是,如果我在调试器中单步执行您的代码,它确实可以正常工作,所以这是优化方面的一个很好的建议。

尽管如此,我的问题仍然存在。

为什么不在构建此图表时仅依靠 Excel 的内置智能并设置源范围以包括列标签和 x 轴类别标签。

以下代码对我来说完美无缺,无论是完全执行还是单步执行:

Sub staffing_Chart()

    Dim staffChart
    Set staffChart = ActiveWorkbook.Worksheets("2015 Chart").ChartObjects.Add(Left:=175, Width:=500, Top:=350, Height:=325)

    With staffChart.Chart

        .ChartType = xlAreaStacked
        .HasTitle = True
        .ChartTitle.Text = "All Geo Int Staffing"
        .SetSourceData Source:=Range("A4:G30")

        With .Axes(xlCategory)
            .CategoryType = xlCategoryScale
            .CrossesAt = 1
            .Crosses = xlAutomatic
            .TickMarkSpacing = 5
            .TickLabelSpacing = 5
            .TickLabels.NumberFormat = "[$-409]mmm;@"
        End With

    End With

End Sub