Tendrías un método que es guardar el fichero antes de ejecutar la macro o poner una línea al principio de tu macro que guardara el fichero y si quieres lo recuperas:
ActiveWorkbook.SaveAs FileFormat:=xlOpenXMLWorkbookMacroEnabled
Se puede mejorar si se quiere para guardar el libro con otro nombre o que no pida confirmación de sobreescritura.
·
En esta página tienes algo más depurado pero no exento de riesgo: Deshacer macro
Debes ver ese enlace porque tiene definiciones y la macro UndoZero() que deben copiarse tal cual.
El funcionamiento sería seleccionar el rango que queremos guardar, ejecutar la macro y si queremos deshacer dar CTRL+Z. Mucho cuidado, hay que seleccionar el rango a guardar, si no no se guarda nada y es irrecuperable. Y hay que asegurarse que la macro no cambiara datos fuera del rango seleccionado.
La macro que debes modificar algo es ZeroRange(), quitar la parte que pone ceros y cambiarla por tu propia macro, incluso le puedes cambiar el nombre y quedaría algo así:
·
Sub Mi_macro()
MsgBox (ActiveWorkbook.Name)
' Abort if a range isn't selected
If TypeName(Selection) <> "Range" Then Exit Sub
' The next block of statements
' Save the current values for undoing
ReDim OldSelection(Selection.Count)
Set OldWorkbook = ActiveWorkbook
Set OldSheet = ActiveSheet
i = 0
For Each cell In Selection
i = i + 1
OldSelection(i).Addr = cell.Address
OldSelection(i).Val = cell.Formula
Next cell
'
'Aquí vienen las instrucciones propias de la macro.
'
' Specify the Undo Sub
Application.OnUndo "Undo the ZeroRange macro", "UndoZero"
End Sub
'
Y eso es todo, saludos.
:
: