Les macros Excel ne semblent pas autoriser l'utilisation de "Annuler" après leur exécution. Y a-t-il un moyen de créer une fonctionnalité undo
dans une macro VBA dans Excel?La fonction Annuler dans une macro VBA Excel
Répondre
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
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.
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?
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. –
@ExcelDevelopers vous voulez dire comme [ici] (http://www.jkp-ads.com/Articles/UndoWithVBA00.asp) – Reafidy