Excel VBAでプロジェクトを表示用にロックするにチェックする方法

Excel VBAでVBAProjectのプロパティから「プロジェクトを表示用にロックする」にチェックする方法です。

Excel VBAでプロジェクトを表示用にロックするにチェックする方法

こちらの「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」を実行させます。

実行メニューからCheckLockProjectForDisplayを実行

結果は・・・・、

プロジェクトを表示用にロックするにチェックが入った

おおお、「プロジェクトを表示用にロックする」にチェックが入ってるー^^

ちなみに、ソースのコメントにあるように、パスワードは a です。

2回実行すると、

プロジェクトを表示用にロックするにチェックが外れた

ふむ、チェックが外れました^^

参考サイト

エクセルExcel大事典 VBAマクロ プロジェクト,ロック,解除,パスワード,保護,外す

まとめ

今回の方法は、Windows API(Application Programming Interface) の keybd_event 関数を利用することで、プロパティの設定を変えています。他にも色々使えそうですね、この API。

おかげさまで「Excel VBAマクロ パスワード解除方法」は、多くの方に閲覧いただいております。

記事を書いたときは、まさかこんなに多くの反響があるとは思ってませんでしたが、裏を返せばそれだけ世間ではパスワード管理ができていないということでしょうか。

皆さんもパスワード管理にはくれぐれも注意してくださいね。

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。