Noções básicas de como executar um procedimento VBA no Excel quando uma célula é alterada

Noções básicas de como executar um procedimento VBA no Excel quando uma célula é alterada

Estou tentando mostrar alguns dados do meu SQL Server no Excel. Como tenho uma consulta que atinge 3 tabelas e usa um parâmetro, vou ter que usar VBA.

Não tenho certeza de como fazer o VBA "executar automaticamente". Fazer uma consulta normal no Excel oferece opções como executar quando a planilha estiver aberta ou atualizar automaticamente. Como estou adicionando um parâmetro, gostaria que my Subfosse executado quando eu alterasse o valor da célula em que o parâmetro está.

Alguma ideia?

Responder1

Clique com o botão direito na guia da planilha e escolha Exibir código. Coloque um código como este no módulo da planilha

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address = "$A$1" Then 'only run if the correct cell is changed
        MySub 'this is the name of your vba procedure
    End If

End Sub

Este sub será executado sempre que uma célula dessa planilha for alterada. Se a célula alterada for A1 (alterar para se adequar aos seus dados), um procedimento em um módulo padrão chamado MySub (alterar para se adequar) será executado.

Não sei por que você precisa usar o VBA. Parece que você poderia escrever SQL para extrair quantas tabelas quiser e incluir um parâmetro.

Responder2

Colocar:

application.volatile

no seu código.

Responder3

Para maior clareza direi que o parâmetro está na CÉLULA A1 e o resultado do código VBA está listado na CÉLULA A2.

Em VBAmódulo

Function Test1(strText as string) as string
   Test1 = strText & "15"
End Function

Na Célula A2 coloque a equação "=Test1(A1)
Na Célula A1 coloque o parâmetro que deseja alterar

Gostaria de verificar se funciona e, em seguida, colocar seu outro código VBA para que o código seja executado sempre que A1 for alterado.

Responder4

A resposta de dkusleika parece melhor; as coisas ficam um pouco mais complicadas se você quiser fazer o mesmo para um intervalo. O código a seguir ocorrerá sempre que uma célula dentro da área especificada for modificada.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim woArea As Range, isect As Range
Set woArea = Sheet1.Range("A1:A500")
Set isect = Application.Intersect(Target, woArea)

If isect Is Nothing Then
    ' Nothing happens
Else
    ' Stuff you want to happen goes here
End If

End Sub

informação relacionada