Excelマクロは、実行後に「元に戻す」を使用できないようです。 undo
機能をExcelのVBAマクロに組み込む方法はありますか?
ExcelVBAにはApplication.OnUndo
これを処理する関数:
Public Sub DoSomething
... do stuff here
Application.OnUndo "Undo something", "UnDoSomething"
End Sub
Public Sub UnDoSomething
... reverse the action here
End Sub
マクロの最初の行でコピーをバックアップディレクトリに保存し、そのブックを閉じて元のブックを再度開くので、私の考えは非常に単純です。マクロの実行結果が気に入らない場合は、保存したブックをプルアップしてください。シンプルにしてくださいね?
私は常にマクロを実行する直前に(少なくともテスト中は)保存します。その後、すべてが洋ナシ型になった場合は、保存せずに終了して再度開くことができます。
それを実際のマクロに焼き付けるには、基本的に、変更されたすべての古い状態(セルの内容、数式、書式設定など)をリストに記録してから、そのリストを逆の順序で再生する元に戻すマクロを用意する必要があります。
たとえば、マクロがセルC22の内容を「3」から「7」に変更し、フォーマットを「一般」から「数値、小数点以下第2位」に変更した場合、リストは次のようになります。
C22 value 3
C22 format general
これを逆の順序で(別のマクロで)再生すると、変更が元に戻ります。
次のようなマクロ取り消し情報を保持するために、追加のシート全体を用意することができます。
Step Cell Type Value
---- ---- ----- -------
1 C22 value 3
C22 format general
2...
残念ながら、「実際の」取り消しとうまく統合することはできませんが、それを回避する方法はないと思います。