2008-12-04 33 views

Respuesta

21

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

Public Sub DoSomething 

    ... do stuff here 

    Application.OnUndo "Undo something", "UnDoSomething" 
End Sub 

Public Sub UnDoSomething 

    ... reverse the action here 

End Sub
+4

Aunque esto ayudará a deshacer las acciones del primer sub, lamentablemente aún se pierde el "historial" de acciones de deshacer que pueden haber estado disponibles antes de ejecutar el sub. Si alguien sabe cómo resolver ese problema, sería una gran ayuda. –

+0

@ExcelDevelopers te refieres a [aquí] (http://www.jkp-ads.com/Articles/UndoWithVBA00.asp) – Reafidy

3

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

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

Por ejemplo si su macro cambia una célula contenidos C22 de "3" a "7" y el formato de a "número "general", 2 decimales), su lista sería:

C22 value 3 
C22 format general 

Jugar este de nuevo en orden inverso (con otra macro) sería revertir los cambios

usted podría tener una hoja adicional para mantener toda la macro deshacer la información tal como:.

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

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

4

Mi idea es bastante simple, como la primera línea de la macro guardar una copia en un directorio de copia de seguridad y cierre ese libro y volver a abrir el original. Si no le gustan los resultados de su ejecución macro, abra el libro guardado. Mantenlo simple ¿eh?

Cuestiones relacionadas