Conceptos básicos de cómo ejecutar un procedimiento VBA en Excel cuando se cambia una celda

Conceptos básicos de cómo ejecutar un procedimiento VBA en Excel cuando se cambia una celda

Estoy intentando mostrar algunos datos de mi servidor SQL en Excel. Como tengo una consulta que llega a 3 tablas y usa un parámetro, tendré que usar VBA.

No estoy seguro de cómo hacer que VBA se "ejecute automáticamente". Hacer una consulta normal en Excel le brinda opciones como ejecutar cuando la hoja está abierta o actualizarse automáticamente. Como estoy agregando un parámetro, me gustaría que my Subse ejecute cuando cambie el valor de la celda en la que se encuentra el parámetro.

¿Algunas ideas?

Respuesta1

Haga clic derecho en la pestaña de la hoja y elija Ver código. Ponga código como este en el módulo de la hoja.

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 se ejecutará cada vez que se cambie una celda en esa hoja. Si la celda que se cambió es A1 (cambiar para adaptarlo a sus datos), entonces se ejecutará un procedimiento en un módulo estándar llamado MySub (cambiar para adaptarlo).

Sin embargo, no estoy seguro de por qué tienes que usar VBA. Parece que podría escribir SQL para extraer de tantas tablas como desee e incluir un parámetro.

Respuesta2

Poner:

application.volatile

en tu código.

Respuesta3

Para mayor claridad, voy a decir que el parámetro está en la CELDA A1 y el resultado del código VBA aparece en la CELDA A2.

En VBAmódulo

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

En la Celda A2 coloque la ecuación "=Prueba1(A1)
En la Celda A1 coloque el parámetro que desea cambiar

Verificaría que funciona y luego colocaría el otro código VBA para que se ejecute cada vez que cambie A1.

Respuesta4

La respuesta de dkusleika parece mejor; Las cosas se vuelven un poco más complicadas si quieres hacer lo mismo con un rango. El siguiente código aparecerá cada vez que se modifique una celda dentro del área especificada.

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

información relacionada