セルの入力チェックで変更前の値に戻すのは

VB6,VBA,VBS,EXCEL,DOS,BAT,WSH,WORDの小技メモ

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ 燈明日記/ Perlノート/ 漢字起源/ yahoo

はじめに

本ページは、ウインドウズ系全般のティプスメモです。

そう、はじめはVB系のティプスメモだったのですが…いつの間にか、ウインドウズ系全般のティプスメモになってしまいました。

ちなみに、ティプス(Tips)とは、マニュアルに書かれていない技法や裏わざのことですが、本ページでは、私が経験してこれはと思ったノウハウのメモになっています。

尚、以下は本サイトの最新情報(ブログ)です。

それでは、本ページが何かのお役に立てれば幸いです。ごゆっくりご覧ください。

2009-07-03 セルの入力チェックで変更前の値に戻すのは

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が閃いたのでした(パチパチ)

おわりに

以下のページには、すべてのTIPSがあります。もしよろしければ、どうぞ!

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくVB-TIPS掲示板へご指摘ください。