Я запрашиваю диаграмму на листе и вижу, что она есть, но каждый раз, когда я выполняю следующий фрагмент кода, он оценивается как «Ничего». Это почему?

Sub DeleteGraph()
Dim graph As ChartObject

On Error Resume Next
'graph always evaluates to Nothing
graph = ActiveSheet.ChartObjects("frontier").Activate

    If Not (graph Is Nothing) Then 'graph always evaluates to Nothing
        ActiveSheet.ChartObjects("frontier").Activate
        ActiveChart.Parent.Delete
    End If

End Sub

Этот макрос выполняется при нажатии кнопки на листе, на котором выполняется следующий макрос Initialize, который сбрасывает все вычисления и стирает любой график, если он существует:

Sub InitializeSheet()
    'Get number of projects on worksheet and the corresponding 'final' cell number/ref to use in calculations - Private/Module Variables
    projectCount = Application.WorksheetFunction.Count(Range("A:A"))
    lastCell = projectCount + 1
    DeleteGraph 'Above Macro called here
    'Clear previous calculation data
    Range("I:AD").Value = ""


End Sub

Мне нужно удалить график, созданный макросом при сбросе / инициализации листа. Я проверяю, существует ли график (и пользователь не удалил его вручную) перед выполнением удаления. По какой-то причине я не могу заставить это работать. Что я пропускаю?

1 ответ1

1

Остерегайтесь использования On Error Resume Next в вашем коде, особенно если это код, который не был тщательно протестирован. В этом случае это маскирует синтаксическую ошибку в строке

graph = ActiveSheet.ChartObjects("frontier").Activate

следовательно, никакое значение никогда не присваивается graph . Попробуйте это вместо этого:

Sub DeleteGraph()
Dim graph As ChartObject

On Error GoTo ErrHandler
Set graph = ActiveSheet.ChartObjects("frontier")
graph.Delete
Exit Sub

ErrHandler:
msgBox "Chart does not exist on active sheet!"
Exit Sub

End Sub

Если вам не нравится всплывающее предупреждение, когда диаграмма не найдена, просто удалите строку msgBox .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .