ActiveSheet.ChartObjects (“chart”) sempre retorna Nothing?

0

Estou consultando um gráfico na planilha e vejo que está lá, mas toda vez que executo o seguinte código, ele é avaliado como "Nada". Por que isso?

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

Esta macro é executada quando um botão é clicado na planilha que executa a macro Initialize a seguir, que redefine todos os cálculos e apaga qualquer gráfico, se existir:

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

Preciso excluir o gráfico criado pela macro ao redefinir / inicializar a planilha. Verifico se o gráfico existe (e o usuário não o apagou manualmente) antes de realizar a exclusão. Por alguma razão, não consigo fazer isso funcionar. O que eu estou negligenciando?

    
por PhD 22.07.2013 / 19:22

1 resposta

1

Cuidado com On Error Resume Next em seu código, especialmente se for um código que não foi testado completamente. Neste caso, está mascarando um erro de sintaxe na linha

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

portanto, nenhum valor é atribuído a graph . Tente isso:

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

Se você não gostar do aviso pop-up quando o gráfico não for encontrado, basta remover a linha msgBox .

    
por 22.07.2013 / 23:03