• ベストアンサー

VBAでセルの上書き禁止出来るでしょうか?

エクセルでの車の使用予約簿をサーバーに置いて、使用予定者が予定簿の希望日に氏名を入力して予約使用しています。 これを上書されたと度々問題になりますので、一度入力したセルは変更出来ないようにVBAなどで、設定出来るでしょうか?。 もし、無理なようであれば、入力したセルが上書きされたことを別シート等に記録するなどは設定できますか?。 その他に、良い方法があればご教示ください。 エクセルは2003を使用しています。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

Private Sub Worksheet_Change(ByVal Target As Range)   Dim c As Range   ActiveSheet.Unprotect Password:="1234567"   For Each c In Target     If c.Value <> "" Then       c.Locked = True     End If   Next   ActiveSheet.Protect Password:="1234567" End Sub

hijtxa
質問者

お礼

何度もすいませんでした。 やはり、コードの貼付けが間違っていました。 キチンと思うように動くようになりました。 本当に、ありがとうございました。

その他の回答 (3)

  • myRange
  • ベストアンサー率71% (339/472)
回答No.3

ちょと気になったので。。 例えば、 10日に入れた予定を取り消す場合とか 10日に入れた予定を15日に変更する場合など パスワードを知らない使用者にはできませんよね。 そこらあたりは問題になりそうな気もしますが。。。 以上です。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>ここで、管理者しかロック解除できないパスワードの設定は出来ないでしょうか? パスワード保護 ActiveSheet.Protect password:="1234567"   〃  解除 ActiveSheet.Unprotect password:="1234567"

hijtxa
質問者

補足

外出してて遅くなりました。 ありがとうございます。 ご教示いただいたパスワードの設定コードを入れますと、 セルに入力後エンターキーで確定すると、パスワード入力画面が出てきて、 キャンセルをクリックしてもデバッグとなってしまします。 書き込み方が悪いのだと思います。 どのように書き込めばよいのでしょうか。 たびたびで、申し訳ありませんが、よろしくお願いいたします。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

最初に全セルを選択後 [書式]-[セル]-[保護]-[ロック]のチェックを解除してください。 以下をシートモジュールに貼り付けてください。 Private Sub Worksheet_Change(ByVal Target As Range)   Dim c As Range   ActiveSheet.Unprotect   For Each c In Target     If c.Value <> "" Then       c.Locked = True     End If   Next   ActiveSheet.Protect End Sub Changeイベントでセルに何らかの値が入力されると、セルにロックがかかり上書き出来なくなります。

hijtxa
質問者

補足

早速のご教示ありがとうございます。 これは、一度ロックがかかり上書きが出来なくなりますが、 ツールの保護解除(パスワード無し)で、自由にまた入力出来るようになります。 ここで、管理者しかロック解除できないパスワードの設定は出来ないでしょうか?

関連するQ&A