Excel VBAでプロジェクトを表示用にロックするにチェックする方法
Excel VBAでVBAProjectのプロパティから「プロジェクトを表示用にロックする」にチェックする方法です。
こちらの「Excel VBAマクロ パスワード解除方法」からコメントをいただいたので、ちょっと調べてみました。
「プロジェクトを表示用にロックする」にチェックを入れずにパスワードを設定すると、上図の画面を表示するためにパスワード要求がされるようになりますが、ソースコードは丸見えで変更もできてしまいます。VBAコードを見せたくない場合は、「プロジェクトを表示用にロックする」にチェックを入れましょう。
今回は「プロジェクトを表示用にロックする」に VBA からチェックを入れたり外したりする方法 を紹介します。
環境
- Windows 7
- Excel 2016 32ビット版
今回は Excel 2016 を使って検証しましたが、Excel 2010, Excel 2013 でも OK です。ただし、32ビット版に限ります。
VBAでプロジェクトを表示用にロックする方法
まず、新規の Excel マクロ有効ブック(.xlsm) を作ります。ここでは LockProjectForDisplay.xlsm としました。
標準モジュールを追加します。
下記のソースコードをコピペします。
Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Public Sub CheckLockProjectForDisplay()
AppActivate "Microsoft Visual Basic"
Call SendKeybdEvent(vbKeyMenu, vbKeyT)
Call SendKeybdEvent(vbKeyE)
Call SendKeybdEvent(vbKeyControl, vbKeyTab)
Call SendKeybdEvent(vbKeySpace) 'プロジェクトを表示用にロックするのチェックボックスOn/Off
Call SendKeybdEvent(vbKeyTab)
Call SendKeybdEvent(vbKeyA) ' パスワードを設定(a)
Call SendKeybdEvent(vbKeyTab)
Call SendKeybdEvent(vbKeyA) ' パスワードを設定(a)
Call SendKeybdEvent(vbKeyReturn)
End Sub
Public Sub SendKeybdEvent(arg1 As Integer, Optional arg2 As Variant)
Select Case True
Case IsMissing(arg2)
Call keybd_event(CByte(arg1), 0, 0, 0)
Call keybd_event(CByte(arg1), 0, 2, 0)
Case Else
Call keybd_event(CByte(arg1), 0, 0, 0)
Call keybd_event(CByte(arg2), 0, 0, 0)
Call keybd_event(CByte(arg2), 0, 2, 0)
Call keybd_event(CByte(arg1), 0, 2, 0)
End Select
End Sub
実行メニューから「CheckLockProjectForDisplay」を実行させます。
結果は・・・・、
おおお、「プロジェクトを表示用にロックする」にチェックが入ってるー^^
ちなみに、ソースのコメントにあるように、パスワードは a です。
2回実行すると、
ふむ、チェックが外れました^^
参考サイト
エクセルExcel大事典 VBAマクロ プロジェクト,ロック,解除,パスワード,保護,外す
まとめ
今回の方法は、Windows API(Application Programming Interface) の keybd_event 関数を利用することで、プロパティの設定を変えています。他にも色々使えそうですね、この API。
おかげさまで「Excel VBAマクロ パスワード解除方法」は、多くの方に閲覧いただいております。
記事を書いたときは、まさかこんなに多くの反響があるとは思ってませんでしたが、裏を返せばそれだけ世間ではパスワード管理ができていないということでしょうか。
皆さんもパスワード管理にはくれぐれも注意してくださいね。
おつかれさまでした。