2008-12-04 14 views

Répondre

21

Excel VBA a la fonction Application.OnUndo pour gérer ceci:

Public Sub DoSomething 

    ... do stuff here 

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

Public Sub UnDoSomething 

    ... reverse the action here 

End Sub
+4

Bien que cela puisse aider à annuler les actions du premier sous-marin, vous perdez malheureusement toujours l '"historique" des actions d'annulation qui ont pu être disponibles avant d'exécuter le sous-marin. Si quelqu'un sait comment résoudre ce problème, ce serait un véritable avantage. –

+0

@ExcelDevelopers vous voulez dire comme [ici] (http://www.jkp-ads.com/Articles/UndoWithVBA00.asp) – Reafidy

3

Je sauvegarde toujours immédiatement avant d'exécuter mes macros (pendant au moins les tests) puis, si tout devient piriforme, je peux simplement quitter sans sauvegarder et ré-ouvrir. En l'incorporant dans la macro actuelle, vous devez enregistrer l'ancien état de tout ce qui change (contenu de la cellule, formules, formatage, etc.) dans une liste, puis avoir une macro d'annulation qui lit cette liste dans ordre inverse.

Par exemple, si votre macro change une cellule de contenu C22 de « 3 » à « 7 » et le formatage du numéro « général » à », 2 décimales), votre liste serait:

C22 value 3 
C22 format general 

Jouer à ce dans l'ordre inverse (avec une autre macro) serait annuler les modifications

Vous pourriez avoir une fiche complète supplémentaire pour maintenir la macro des informations d'annulation telles que:.

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

Il ne serait pas intégrer très bien avec le 'vrai' défaire malheureusement, mais je ne pense pas qu'il y ait moyen de contourner cela.

4

Ma pensée est assez simple, comme la première ligne de votre macro enregistrer une copie dans un répertoire de sauvegarde puis fermez ce classeur et rouvrez l'original. Si vous n'aimez pas les résultats de votre macro, ouvrez le classeur enregistré. Reste simple hein?

Questions connexes