valor una tiempo segun macro ejecutar dar con cierto celda cambio cambiar cada automaticamente abrir excel vba

excel - una - ejecutar macro segun valor de celda



Excel VBA ejecuta la macro automáticamente cada vez que se cambia una celda (4)

¿Existe una forma sencilla de hacer que Excel ejecute automáticamente una macro cada vez que se cambia una celda?

La celda en cuestión estaría en la Worksheet("BigBoard").Range("D2") de Worksheet("BigBoard").Range("D2")

Lo que pensé que sería una simple consulta de Google está demostrando ser más complicado: cada muestra involucrada se cruza (sea lo que sea) o el formato de color o cualquier otra cantidad de cosas que parecen ser irrelevantes.


En un intento de detectar un cambio en algún lugar de una columna en particular (aquí en "W", es decir, "23"), modifiqué la respuesta de Peter Alberts a:

Private Sub Worksheet_Change(ByVal Target As Range) If Not Target.Column = 23 Then Exit Sub Application.EnableEvents = False ''to prevent endless loop On Error GoTo Finalize ''to re-enable the events MsgBox "You changed a cell in column W, row " & Target.Row MsgBox "You changed it to: " & Target.Value Finalize: Application.EnableEvents = True End Sub


En un intento por encontrar una manera de hacer que la celda objetivo para el método de intersección sea una matriz de tabla de nombres, me topé con una manera simple de ejecutar algo cuando CUALQUIER celda o conjunto de celdas en una hoja particular cambia. Este código también se coloca en el módulo de la hoja de trabajo:

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 0 Then ''mycode here end if end sub


Otra opcion es

Private Sub Worksheet_Change(ByVal Target As Range) IF Target.Address = "$D$2" Then MsgBox("Cell D2 Has Changed.") End If End Sub

Creo que esto usa menos recursos que Intersect , lo que será útil si su hoja de trabajo cambia mucho.


Sí, esto es posible mediante el uso de eventos de la hoja de trabajo:

En el Editor de Visual Basic, abra la hoja de trabajo que le interesa (es decir, "BigBoard") haciendo doble clic en el nombre de la hoja de trabajo en el árbol en la parte superior izquierda. Coloque el siguiente código en el módulo:

Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Me.Range("D2")) Is Nothing Then Exit Sub Application.EnableEvents = False ''to prevent endless loop On Error Goto Finalize ''to re-enable the events MsgBox "You changed THE CELL!" End If Finalize: Application.EnableEvents = True End Sub