Excel VBA Macro ・ ユーザーフォーム ・ FAQ
ユーザーフォームで Undo機能を使うには?
Question 32.4
エクセル97−2000を使っています。
ユーザーフォームで編集中にundo機能などの編集ができないでしょうか。仕事でぜひ必要です。よろしくお願いします。
Answer
Copyright (C) 2000.10.23 永井善王
Undo機能とは、ユーザーが入力操作中に、直前に行った操作を「元に戻す」または「やり直す」ときに利用する機能のことであり、例えば、セルに値を入力した直後、あるいは、セルの値を修正した直後に[編集]メニューに表示される[元に戻す]をクリックすると、直前に行った操作が取消されてセルの値が元に戻ることなどと、理解してよいでしょうか。
ユーザーフォームでも[元に戻す]と[やり直し]コマンドがサポートされています。手操作の場合は通常、
Ctrlキーを押しながら Zキーを押すと[元に戻す]、
Ctrlキーを押しながら Yキーを押すと[やり直し]となります。
もしも、これで足りるなら、わざわざマクロを組む必要はありません。
マクロで利用可能なUndo機能には、どのようなものがあるでしょうか。下表で概要を見てみましょう。
機 能
構 文
Undo メソッド
ユーザーが最後に実行した操作を取り消す
expression .Undo
UndoAction メソッド
取消可能な直前のアクション (*)を取り消す
object .UndoAction
RedoAction メソッド
最後に行った元に戻す操作を取り消す
object .RedoAction
OnUndo メソッド
[編集] メニューの [元に戻す] でのメニュー項目名や、 クリックしたときに実行されるプロシージャ名を設定する
expression .OnUndo(Text, Procedure)
Repeat メソッド
[編集] メニューの [繰り返し] でのメニュー項目名や、 クリックしたときに実行されるプロシージャ名を返す
expression .OnRepeat(Text, Procedure)
CanUndo プロパティ
直前にユーザーが行った操作を元に戻すことが可能か どうかを取得する
object .CanUndo
CanRedo プロパティ
最後に行った元に戻す操作を取り消すことが可能か どうかを取得する
object .CanRedo
(*) 直前のアクションなら必ず元に戻せる訳ではなく、取消可能なアクションと取消不可能なアクションに分かれる
では、具体的に考えてみましょう。
質問文の「ユーザーフォームで編集中」とは、例えば『ユーザーフォームのテキストボックスに入力中』。
「undo機能などの編集」とは、例えば『元に戻す』とした場合、マクロはどう書けば良いでしょうか。下図を例にして進めます。
初期表示されたユーザーフォーム
テキストボックスに「中止」と追加入力してから、[元に戻す]ボタンをクリックする
テキストボックスが追加入力する前の状態に戻せた場合に、表示されるメッセージボックス
マクロの動きを分かり易くするために、わざわざ表示していますが、なくても構いません。
マクロは、[元に戻す]ボタンがクリックされたときに実行されるイベントプロシージャとして、次のようにVBE画面で、ユーザーフォームのコードとして作成します。
Private Sub CommandButton1_Click() '[元に戻す]ボタンがクリックされたときに実行
If UserForm1.CanUndo = True Then '元に戻すことが可能ならば
UserForm1.UndoAction '直前のアクションを取り消す
MsgBox "元に戻しました", vbInformation, "すぐマク"
Else
MsgBox "元に戻せません", vbExclamation, "すぐマク"
End If
End Sub
2行目で CanUndoプロパティで元に戻すことが可能かどうか、3行目で UndoActionメソッドで直前のアクションを取り消しています。
以上、基本的な部分を解説しました。その他の機能は、これを参考にして組んでみてください。
サンプルブックのダウンロードは ここをクリック
(YNxv9d6_Undo.xls 47KB) ※ 一旦、ブックをハードディスクに保存し、後で改めて開いてから実行してください。