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.