はもちくわ

コードについて自分なりの解釈を書いてます。

【ExcelVBA】小技3 ファイルの保存を管理者のみ可能にする

f:id:hamochikuwa440:20220224160406p:plain

共有している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を条件分岐で使えばよいですよ。

応用して使ってみてください!