A1に”A”と入力
Enter
A2に”B”と入力
Enter
Ctrl+zで「元に戻す」を実行
記録されるマクロは以下のようになる。
ActiveCell.FormulaR1C1 = "A" Range("A2").Select
「元に戻す」を実行すると、
「元に戻す」は記録されず、
直前の操作が記録から消える。
ちなみにマクロの記録は、リアルタイムでコードが生成されている。
なので上記の動作を記録するときにVBEを起動しておくと、
何か処理をするたびにコードが増えていく。
A2に”B”を入力というコードも一度は記録されるのが確認できる。
では記録されなかった「元に戻す」はどう書くかというと
Application.Undo
これで元に戻せるのだが1つ注意すべき点は
・直前の編集がマクロで変更を行ったものでないこと
例えばA1に”A”と入力した後で下記のコードを実行するとエラーが発生する
ActiveCell.FormulaR1C1 = "B" Application.Undo
しかし同じようにA1に”A”と入力した後で下記のコード実行してもエラーは発生しない
MsgBox "test" Application.Undo
msdnには下記のような表記がある
注釈
Undo メソッドは、マクロを実行する前にユーザーが実行した最後の操作を元に戻す場合にだけ使用できます。このメソッドは、マクロの先頭に記述する必要があります。Visual Basic で実行したコマンドは元に戻すことができません。
Application.Undo メソッド (Excel)
直前の操作がシートに何も影響を与えていなければ、必ずしも先頭にUndoメソッドを記載しなくても良いようだ。
Worksheet_Changeに仕込んで、望まない処理をされたときに戻すときに使ったりしている。