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