Pausar macros se uma célula alterar o valor

3

Eu tenho uma pasta de trabalho com um conjunto muito complicado de macros (100 delas). Em algum lugar, uma das macros às vezes altera o valor em uma célula específica, mas não consigo descobrir qual delas. Se houver uma maneira de pausar a execução do VBA se uma determinada célula for alterada, posso ver qual Sub mudou?

    
por Adam 20.10.2015 / 01:21

2 respostas

5

A resposta de teylyn é ótima; Estou usando uma premissa semelhante, mas sem a necessidade de atualizar as macros existentes, forçando, basicamente, um erro de tempo de execução quando a célula que está sendo monitorada é atualizada

Esta é a configuração: módulo VBA para a célula monitorada (no meu caso, célula C3)

O evento _Change dispara uma divisão por 0 se o alvo for C3:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 3 And Target.Column = 3 Then Debug.Print 1 / 0
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    x1
End Sub

3 Testar funções em um módulo padrão, cada uma atualizando as células A3, B3 e C3:

Sub x1()
    Cells(3, 1) = Cells(3, 1) + 1
    x2
End Sub

Sub x2()
    Cells(3, 3) = Cells(3, 2) + 1
    x3
End Sub

Sub x3()
    Cells(3, 2) = Cells(3, 3) + 1
End Sub

Quando altero a seleção na planilha, o processo é iniciado e exibe uma janela de erro como esta:

EucliconobotãoDepurareelemelevaparaalinhadoevento_Changecomoerro:

Nesteponto,euabroapilhadechamadas(Ctrl+L)

Issomostratodasaschamadasfeitas,aúltimadelasnotopo,entãocliqueduasvezesnaanterior:

A macro que atualizou a célula terá um triângulo verde apontando para a linha exata que a atualizou

    
por 20.10.2015 / 05:07
2

Deixe cada macro debug.print seu nome quando ele for iniciado. Em seguida, crie um evento de alteração de planilha que monitore a célula específica. Deixe o evento de mudança aparecer uma mensagem. Vá para a janela Immediate e veja qual macro foi iniciada antes de aparecer a caixa de mensagem.

    
por 20.10.2015 / 04:37