Varios lectores han hecho preguntas que requieren que Excel ejecute una sección de macro cada vez que un valor cambia en la hoja de cálculo de Excel.
Primero, el método mejorado disponible solo en XL97: Excel 97 tiene algunos nuevos controladores de eventos que permiten ejecutar una macro cada vez que cambia una celda.
Digamos que cada vez que se ingresa un valor mayor que 100 en la columna A, desea formatear la celda al lado para que sea roja.
- Abra la edición de Visual Basic (Herramientas> Macro> Editor de Visual Basic)
- En la ventana izquierda, haga clic derecho en Sheet1 y seleccione Ver código.
- En la parte superior del cuadro de diálogo Código Libro1 - Hoja1, hay dos menús desplegables. En el menú desplegable de la izquierda, seleccione Hoja de trabajo. En el menú desplegable de la derecha, seleccione Cambiar.
-
Ingrese las siguientes líneas de código:
Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Column = 1 Then ThisRow = Target.Row If Target.Value> 100 Then Range("B" & ThisRow).Interior.ColorIndex = 3 Else Range("B" & ThisRow).Interior.ColorIndex = xlColorIndexNone End If End If End Sub
Cada vez que se cambia un valor en una celda, se ejecutará esta macro. La variable Target le dirá qué celda y el nuevo valor de la celda. Sorprendentemente, el uso de este método no ralentiza significativamente el proceso.
Tenga en cuenta que la macro permanecerá activa mientras la hoja de trabajo esté abierta o hasta que ejecute una macro con la siguiente línea:
Application.EnableEvents = False
/ p> En Excel 95 / 7.0: debe utilizar el método OnEntry. Usted especifica una macro que desea ejecutar después de ingresar cualquier valor. En este caso, la variable Application.Caller contiene la dirección y el valor que cambió. Ingrese lo siguiente en un nuevo módulo:
Sub AutoOpen() Worksheets("Sheet1").OnEntry = "CheckIt" End Sub Sub CheckIt() If Application.Caller.Column = 1 Then ThisRow = Application.Caller.Row If Application.Caller.Value> 100 Then Range("B" & ThisRow).Interior.ColorIndex = 3 Else Range("B" & ThisRow).Interior.ColorIndex = xlColorIndexNone End If End If End Sub
La comprobación OnEntry permanecerá activa hasta que ejecute una macro con el siguiente código:
Worksheets("Sheet1").OnEntry = False