Excelmacros:对象_工作表的方法范围失败

我已经写了一个Excel模板的macros。 macros必须在所有工作表上运行,并更改每个图表的来源(每个工作表具有相同的模板,只有一个图表)。 当我运行下面的代码时,它可以正常工作,但是当有很多工作表(50或更多)时,它不会在标题中出现exception。 它之前没有发生过,它确实改变了来源。

代码如下:

For Each ws In Sheets If ws.ChartObjects.Count > 0 Then If ws.Cells(1, "I").Value <> 1 Then ws.ChartObjects("Chart 1").Activate ws.Activate ActiveChart.SetSourceData Source:=ws.Range("A17:B20") ws.Cells(1, "I").Value = 1 ActiveCell.Select End If End If Next 

我试过激活的WS和使用Activesheet我也试过使用像这样:

 Dim rng as Range With ws rng = .Range("A17:B20") End With 

没有运气,但迄今。

所有这些select和激活都是不必要的。 我不确定为什么它会偶尔触发这个错误,但我认为它确实如此。

尝试:

 For Each ws In Worksheets If ws.ChartObjects.Count > 0 Then If ws.Cells(1, "I").Value <> 1 Then ws.ChartObjects("Chart 1").Chart.SetSourceData Source:=ws.Range("A17:B20") ws.Cells(1, "I").Value = 1 End If End If Next 

我还将Sheets更改为Worksheets以防止意外迭代图表工作表。