すぐに役立つエクセルVBAマクロ集 すぐマク
すぐに役立つ Excel VBA マクロ集 Excel VBA Macro
FAQ
Google
 
Home |  What's New! |  Gallery |  Introduction |  Service |  Profile 500連発・組み方講座フォロー Big Color Pallet
[広告]
Excel VBA Macro
Excel DownLoad
© 1997 - 2007
永井善王.
All RightsReserved.
HappyTech & Co., Ltd.
www.happy500z.com
Excel VBA Macro ・ ユーザーフォーム ・ FAQ
ユーザーフォームで Undo機能を使うには?
Question 32.4 Previous Next
エクセル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)
※ 一旦、ブックをハードディスクに保存し、後で改めて開いてから実行してください。