Excel宏:对象_worksheet的方法范围失败

时间:2016-06-08 11:32:52

标签: excel vba excel-vba macros

我为Excel模板编写了一个宏。 宏必须在所有工作表上运行并更改每个图表的来源(每个工作表具有相同的模板,只有一个图表)。 当我运行以下代码时它工作正常,但是当有很多工作表(50或更多)时,它不会在标题中获得异常。它之前没有发生在纸张上,它确实改变了来源。

以下是代码:

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

到目前为止没有运气。

1 个答案:

答案 0 :(得分:2)

所有这些选择和激活都是非常不必要的。我不确定为什么它会偶尔触发那个bug,尽管我认为它确实存在。

尝试:

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,以防止意外迭代图表。