共有しているExcelファイルの書式や数式を保護するために、不特定多数の使用者が上書き保存できないようにしたい。でも、ファイル管理者は修正した結果を上書き保存したい。みたいなことありませんか?
そんな時は、パスワードを知っている人だけ保存できるようにVBAでコントロールしてしまいましょう!
コードはThisWorkbookのWorkbook_BeforeSaveに配置します。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim pass As String
pass = InputBox("保存は管理者以外できません。" & vbCrLf & "パスワードを入力してください。", "管理者権限確認")
If pass <> "admin" Then
Cancel = True
End If
End Sub
これで、パスワード「admin」を入力しないと保存がキャンセルされるので、管理者しか保存できなくなります。
ただ、これだけで運用しますと、ファイルを閉じるときに出る「保存しますか?」ウインドウで「はい」を選ぶたびにこのコードが実行されてウザい仕様になります。なので、BeforeCloseのイベントで閉じるときは保存させずに閉じるようにしておくとさらにいいですね。
簡単に保存メッセージを出させないようにするには、
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Saved = True
End Sub
この1行でOKです。
このコードは実際にはファイルを保存してないけど、Excelには「このファイルは保存してます」って嘘をつく、よく使われる手段です。これをしておくと保存しますか?ってExcelは聞いてきません。Excelって一度保存したファイルを閉じる時は、保存を促すウインドウが出ないでファイルが閉じられますよね?
それと同じ動作でファイルが閉じられるわけです。なにかメッセージを出して閉じたい場合や、閉じる前に閉じることをキャンセルさせたいときはMsgBox
を使ってCancel=True
を条件分岐で使えばよいですよ。
応用して使ってみてください!