プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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
    • good
    • 3
この回答へのお礼

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

お礼日時:2010/04/13 13:17

ちょと気になったので。



例えば、
10日に入れた予定を取り消す場合とか
10日に入れた予定を15日に変更する場合など
パスワードを知らない使用者にはできませんよね。

そこらあたりは問題になりそうな気もしますが。。。
以上です。
    • good
    • 0

>ここで、管理者しかロック解除できないパスワードの設定は出来ないでしょうか?


パスワード保護
ActiveSheet.Protect password:="1234567"
  〃  解除
ActiveSheet.Unprotect password:="1234567"

この回答への補足

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

補足日時:2010/04/13 12:38
    • good
    • 0

最初に全セルを選択後


[書式]-[セル]-[保護]-[ロック]のチェックを解除してください。

以下をシートモジュールに貼り付けてください。
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イベントでセルに何らかの値が入力されると、セルにロックがかかり上書き出来なくなります。

この回答への補足

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

補足日時:2010/04/13 09:15
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています