Цикл «For» не удаляет все диаграммы в Worksheet - PullRequest
0 голосов
/ 25 июня 2018

У меня есть лист, на котором я создаю 9 новых диаграмм, и они называются с Chart67 по 75, потому что есть еще 66 диаграмм, которые исправлены.Но перед созданием диаграмм я хотел бы удалить их, если по какой-либо причине они могут существовать на листе.

Приведенный ниже код не выполняет работу и удаляет только набор диаграмм (67, 69, 71, 73 и 75), а затем выдает ошибку «Метод« ChartObjects »объекта« _Worksheet »не выполнен».Каждый раз, когда я запускаю код, он удаляет дальнейшие диаграммы, но снова не все и снова выдает ту же ошибку.

Но если я проверю код, просто закомментировав строку «.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 голосов
/ 25 июня 2018

Если вы хотите использовать For Each подход, вероятно, это должно сработать:

Sub trythis()
    Dim c As ChartObject, ws As Worksheet

    For Each ws In ThisWorkbook.Sheets
        For Each c In ws.ChartObjects
            If c.Index > 66 Then c.Delete

        Next c
    Next ws

End Sub
0 голосов
/ 25 июня 2018

Первый цикл: Когда i = 67, вы удалите диаграмму 67.
Произошел сдвиг: Теперь названия ваших диаграмм будут смещаться соответственно.68 goes to 67.69 goes to 68.и т.д.
Следующий цикл: Теперь вы находитесь на i = 68.Но обратите внимание, что ваша диаграмма 68 теперь имеет соответствующее значение 67. Диаграммой, которая будет удалена, будет новая диаграмма, связанная с i = 68, которая на самом деле была диаграммой # 69, когда вы изначально запускали свой цикл (68будет пропущен, что согласуется с результатами, которые вы описали).

Вот почему удаляются все остальные диаграммы.

Вы можете попробовать вернуться назад, чтобы решить эту проблему, так как судаление:

For i = wsCR.ChartObjects.count to 67 Step - 1
    wsCR.ChartObjects(i).Delete
Next i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...