¿Cómo ejecutar macro al cambiar el valor de una celda sin la opción de Change()?

Necesito ejecutar una macro cuando ingrese unos datos en una celda especifica, la macro que quiero ejecutar es:

Sub guardar()
Dim N As Integer

N = WorksheetFunction.CountA(Hoja12.Range("A:A"))

Hoja12.Cells(N + 1, 1) = ActiveSheet.Cells(10, 7)
Cells(10, 7).ClearContents

End Sub

Con la opción, en la hoja correspondiente:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim N As Integer
If Target.Address = "$G$10" Then guardar

End Sub

Me genera el error 28 en tiempo de ejecución, espacio de pila insuficiente, y creo que es porque la opción de Change() me genera un bucle infinito, se que puedo poner un botón, pero la idea es que se ejecute automático apenas se escriba el dato

1 Respuesta

Respuesta
1

.01/09/16

Buenos días, Sandra

Efectivamente, la rutina Guardar modifica la celda G10 con la instrucción Cells(10, 7). ClearContents. A su vez el evento Change captura eso como un cambio y vuelve a ejecutar Guardar.

Para resolver tal situación modifica la rutina guardar como sigue:

Sub guardar()
Dim N As Integer
N = WorksheetFunction.CountA(Hoja12.Range("A:A"))
Hoja12.Cells(N + 1, 1) = ActiveSheet.Cells(10, 7)
Application.EnableEvents = False
    Cells(10, 7).ClearContents
Application.EnableEvents = True
End Sub

Como verás, antes de la instrucción que genera el bucle infinito, desactivas los eventos automáticos y, luego de borrar esa celda, la rutina vuelve al estado anterior.

Asumo que con esto deberías tener resuelto el problema.

Saludos

Fernando

Nota: Desde hace varias semanas este sitio tarda mucho en actualizar las preguntas / respuestas que se envían. Imagino que deben tener saturado los servidores. Habrá que tener paciencia.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas