visual variable valor una refrescar para objetos macro hoja datos crear codigos codigo celda buscar asignar excel vba excel-vba undo

variable - refrescar hoja excel vba



Deshacer de edificio en una macro de Excel VBA (3)

Las macros de Excel no parecen permitir el uso de "deshacer" después de ejecutarlas. ¿Hay alguna manera de hornear la funcionalidad de undo en una macro de VBA en Excel?


Excel VBA tiene la función Application.OnUndo para manejar esto:

Public Sub DoSomething ... do stuff here Application.OnUndo "Undo something", "UnDoSomething" End Sub Public Sub UnDoSomething ... reverse the action here End Sub


Mi pensamiento es bastante simple, ya que la primera línea de su macro guarda una copia en un directorio de respaldo, luego cierra ese libro de trabajo y vuelve a abrir el original. Si no le gustan los resultados de su ejecución macro, abra el libro guardado. Mantenlo simple ¿eh?


Siempre guardo inmediatamente antes de ejecutar mis macros (al menos durante la prueba) y, si todo sale en forma de pera, puedo salir sin guardar y volver a abrirlo.

Horneándolo en la macro real, básicamente tendrá que registrar el estado antiguo de todo lo que cambia (contenido de la celda, fórmulas, formato, etc.) en una lista y luego tener una macro para deshacer que reproduce esa lista en orden inverso.

Por ejemplo, si su macro cambia los contenidos de una celda C22 de "3" a "7" y formatea de "general" a "número, 2 decimales", su lista sería:

C22 value 3 C22 format general

Reproducir esto en orden inverso (con otra macro) revertiría los cambios.

Podría tener toda una hoja adicional para contener la información de deshacer macro, como por ejemplo:

Step Cell Type Value ---- ---- ----- ------- 1 C22 value 3 C22 format general 2...

No se integraría muy bien con el deshacer ''real'' desafortunadamente, pero no creo que haya forma de evitarlo.