“ For”循环不会删除工作表中的所有图表

时间:2018-06-25 16:41:15

标签: excel-vba vba excel

我有一个工作表,在上面创建了9个新图表,它们被命名为Chart67到Chart 75,因为还有66个其他固定图表。但是在创建图表之前,无论出于何种原因,我想删除它们。

下面的代码不起作用,仅删除一组图表(67、69、71、73和75),然后给出错误“对象'_Worksheet'的方法'ChartObjects'失败”。每次我启动代码时,它都会删除其他图表,但又不会全部删除,并且会再次给出相同的错误。

但是,如果我仅通过注释掉“ .delete”行来测试代码,那么我将在调试窗口中获得所有要删除的图表,而不会出现任何错误。

有人可以向我解释发生了什么吗?我还逐步调试了一下,发现删除功能到位后,屏幕会闪烁,然后选择仅会跳出一个图表。

(在我发布问题之前,我还测试了另一件事,在我看来,For循环会记住第一个值(67),因为它不再存在,因此会跳过68,依此类推)->但是为什么?我应该如何进行?

Thx

Public Sub test()
Dim wsCR As Worksheet:     Set wsCR = ThisWorkbook.Worksheets("Charts")
Dim i As Long

For i = 67 To wsCR.ChartObjects.count
    wsCR.ChartObjects(i).Activate
        With ActiveChart
            Debug.Print .Parent.Name
            '.Parent.Delete
        End With
Next

End Sub

2 个答案:

答案 0 :(得分:3)

第一个循环:在i = 67时,您将删除图表67。
发生移位:现在您的图表名称将相应地移位。 68 goes to 6769 goes to 68。等
下一个循环:您现在在i = 68上。但是请注意,您的图表68现在具有对应的值67。要删除的图表将是与i = 68关联的 new 图表,当您最初开始创建图表时实际上是图表#69。循环(将跳过68,这与您描述的结果一致)。

这就是为什么要删除所有其他图表的原因。

您可以尝试倒退解决此问题,因为删除操作不会改变:

For i = wsCR.ChartObjects.count to 67 Step - 1
    wsCR.ChartObjects(i).Delete
Next i

答案 1 :(得分:0)

如果您想使用mutation createAuthor($firstName: String, $lastName: String) {方法,则可能应该可以:

For Each