Excel宏图表创建仅在单步执行调试器时正确执行
所以我的Excel宏有一个导致压力的问题。当我运行代码以根据某些表数据创建图表时,它会中断,说创建第六个系列时出错,但当我在调试器中逐步执行代码时,它运行得非常好!我下面的方法有什么问题吗?还是另一个我不知道的问题 以下是图表代码:Excel宏图表创建仅在单步执行调试器时正确执行,excel,excel-2013,excel-charts,vba,Excel,Excel 2013,Excel Charts,Vba,所以我的Excel宏有一个导致压力的问题。当我运行代码以根据某些表数据创建图表时,它会中断,说创建第六个系列时出错,但当我在调试器中逐步执行代码时,它运行得非常好!我下面的方法有什么问题吗?还是另一个我不知道的问题 以下是图表代码: Sub staffing_Chart() Dim staffChart Set staffChart = ActiveWorkbook.Worksheets("2015 Chart").ChartObjects.Add(Lef
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$4"
.FullSeriesCollection(1).XValues = "='2015 Chart'!$A$5:$A$30"
.FullSeriesCollection(2).Name = "='2015 Chart'!$C$4"
.FullSeriesCollection(3).Name = "='2015 Chart'!$D$4"
.FullSeriesCollection(4).Name = "='2015 Chart'!$E$4"
.FullSeriesCollection(5).Name = "='2015 Chart'!$F$4"
.FullSeriesCollection(6).Name = "='2015 Chart'!$G$4"
.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
这是表格:
编辑
为了回答你的建议,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
为什么不单独设置
.SetSourceData:=Range(“A4:G30”)
和.FullSeriesCollection
?如果您按照我的建议设置源范围,它将按照它应该的方式进行完美设置。尝试了您的建议,但仍然收到错误,我将输出放在我的帖子的编辑中。当您单击图表并查看数据源时会发生什么情况。。。真奇怪!?Ahhh代码的问题是这一行:.SetSourceData:=Range(“A4:'2015 Chart'!G30”)它使用的是不同的工作表,因为在运行图表创建之前的代码时,它会在2015 Chart以外的工作表上结束#facepalm代码现在可以工作了!谢谢通过添加“2015年图表”修复了此问题!在这个范围内,也可以在那里设置一个活动的工作表调用。啊-我应该知道这一点。最好的书写方式是:工作表(“2015年图表”)。范围(“A4:G30”)
。您肯定总是希望在VBA中限定所有特定工作簿/工作表/范围。否则,您可能会遇到意想不到的错误,需要花费很长时间才能发现:)(就像您刚才所做的那样!)