- ベストアンサー
VBAでセルの上書き禁止出来るでしょうか?
エクセルでの車の使用予約簿をサーバーに置いて、使用予定者が予定簿の希望日に氏名を入力して予約使用しています。 これを上書されたと度々問題になりますので、一度入力したセルは変更出来ないようにVBAなどで、設定出来るでしょうか?。 もし、無理なようであれば、入力したセルが上書きされたことを別シート等に記録するなどは設定できますか?。 その他に、良い方法があればご教示ください。 エクセルは2003を使用しています。 よろしくお願いいたします。
- みんなの回答 (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
その他の回答 (3)
- myRange
- ベストアンサー率71% (339/472)
ちょと気になったので。。 例えば、 10日に入れた予定を取り消す場合とか 10日に入れた予定を15日に変更する場合など パスワードを知らない使用者にはできませんよね。 そこらあたりは問題になりそうな気もしますが。。。 以上です。
- watabe007
- ベストアンサー率62% (476/760)
>ここで、管理者しかロック解除できないパスワードの設定は出来ないでしょうか? パスワード保護 ActiveSheet.Protect password:="1234567" 〃 解除 ActiveSheet.Unprotect password:="1234567"
補足
外出してて遅くなりました。 ありがとうございます。 ご教示いただいたパスワードの設定コードを入れますと、 セルに入力後エンターキーで確定すると、パスワード入力画面が出てきて、 キャンセルをクリックしてもデバッグとなってしまします。 書き込み方が悪いのだと思います。 どのように書き込めばよいのでしょうか。 たびたびで、申し訳ありませんが、よろしくお願いいたします。
- watabe007
- ベストアンサー率62% (476/760)
最初に全セルを選択後 [書式]-[セル]-[保護]-[ロック]のチェックを解除してください。 以下をシートモジュールに貼り付けてください。 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イベントでセルに何らかの値が入力されると、セルにロックがかかり上書き出来なくなります。
補足
早速のご教示ありがとうございます。 これは、一度ロックがかかり上書きが出来なくなりますが、 ツールの保護解除(パスワード無し)で、自由にまた入力出来るようになります。 ここで、管理者しかロック解除できないパスワードの設定は出来ないでしょうか?
お礼
何度もすいませんでした。 やはり、コードの貼付けが間違っていました。 キチンと思うように動くようになりました。 本当に、ありがとうございました。