セルの入力チェックで変更前の値に戻すのは
VBAでセル毎の入力チェックをする時は、普通、Worksheet_Changeサブルーチンにて行います。
Worksheet_Changeサブルーチンには、VB本体からTargetオブジェクトが渡されます。
Targetオブジェクトは、変更後のデータになっています。
変更後のデータをチェックして、何かのエラーの場合は、変更前の値に戻したいケースが多々ありますね。
しかし、Targetオブジェクトには、変更前のデータがないのです(探しまくったがみつからない)。
さぁー、こまった!
ここで、発想を変えて、Undoすればいいのではないか・・・と思いつく!
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Value = "666" Then '何かのエラーの場合(例では666が入力されたとき) Application.Undo '変更前の値に戻にもどす End If End Sub
いや・・・、実は、これを編み出すのに結構時間が掛かってしまった。
Targetオブジェクトの中に変更前の値があるのかを探しまくり、ネットで変更前の値の求め方を探しまくり、結局見つからず・・・。
天の啓示、Undoが閃いたのでした(パチパチ)