Excel 開発タブを非表示にしてVBAやマクロを変更させない方法
Excelで開発タブを非表示にしてVBAやマクロを変更させない方法です。
ここで紹介する方法は、ソースを変更させないことを目的としたものです。なぜなら「VBA Project」のパスワードロックをしても解除できてしまうからです。
>>Excel VBAマクロ パスワード解除方法はこちら<<なので「Visual Basicエディタ(VBE)」画面が表示されなければいいかと安易に考えた結果、ここで紹介する方法になりました。
ショートカットキーを無効にすること、リボンに「開発タブ」を表示させないこと、「表示」タブにマクロを表示させないこと、の3つで実現できます(たぶん)。
ここでは Excelでショートカットキーを無効にする方法と、リボンに「開発タブ」を非表示にする方法 を紹介します。
VBAでショートカットキーを無効にする
まず、VBAでショートカットキーを無効にします。
標準モジュールを追加し、下記のコードを貼り付けます。
Option Explicit
Public Sub Auto_Open()
Call CommandControl(False)
End Sub
Public Sub Auto_Close()
Call CommandControl(True)
End Sub
'**
' ショートカットキーの制御
' 引数 true:利用可, false: 利用不可
'**
Private Sub CommandControl(Enabled As Boolean)
If Enabled = False Then
Application.OnKey "%{F8}", ""
Application.OnKey "%{F11}", ""
Else
Application.OnKey "%{F8}"
Application.OnKey "%{F11}"
End If
End Sub
ブックを開いたときに、ショートカットキーを無効にし、閉じるときに有効にしています。
「%」はALTキーを表します。ALT + F8で「マクロの表示」、ALT + F11で「Visual Basicエディタ(VBE)」が割り当てられています。
「OnKey メソッド」の仕様については、下記のサイトが参考になります。
他のブックが開かれていないことを確認する
VBAでショートカットキーを無効にしても、他のブックが開かれていたらVBEが開けてしまいます。
なので他のブックが開かれていたら、このブックは閉じることにします。先ほどのAuto_Openプロシージャを下記のコードに変更します。
Public Sub Auto_Open()
If Workbooks.Count > 1 Then
MsgBox "他のブックが開いるのでこのブックは閉じます。", vbOKOnly + vbExclamation, "アプリケーションエラー"
ThisWorkbook.Close
End If
Call CommandControl(False)
End Sub
Workbooks.Countで開いているブックの件数が取れるので、1件以上開いていたらメッセージを表示してブックを閉じます。
他のブックが開かれたことを確認する
今度は自ブックを開いた後に、別のブックが開かれた場合を想定します。
他のブックが開かれたらエラーメッセージを表示して、そのブックは閉じます。つまり、自ブック以外は開かせないということですね。
ThisWorkbookへ下記のコードを追加します。
Option Explicit
Dim WithEvents xlApp As Application
Private Sub Workbook_Open()
Set xlApp = Application
End Sub
Private Sub xlApp_NewWorkbook(ByVal Wb As Workbook)
If Not Wb Is ThisWorkbook Then
MsgBox "このブック「" + ThisWorkbook.Name + "」が開かれている間は、他のブックは開けません。", vbOKOnly + vbExclamation, "アプリケーションエラー"
Workbooks(Wb.Name).Close
End If
End Sub
Private Sub xlApp_WorkbookOpen(ByVal Wb As Workbook)
If Not Wb Is ThisWorkbook Then
MsgBox "このブック「" + ThisWorkbook.Name + "」が開かれている間は、他のブックは開けません。", vbOKOnly + vbExclamation, "アプリケーションエラー"
Workbooks(Wb.Name).Close
End If
End Sub
ここまでやったら「VBAProject」のプロパティから、パスワードを設定しましょう。
Custom UI Editorでリボンをカスタマイズ
次に「Custom UI Editor」を使ってリボンをカスタマイズし、開発タブと表示タブ内のマクロを非表示にします。
Custom UI Editorについては「Custom UI Editor Tool インストール方法と使い方」を参考にしてください。
下記のコードを貼り付けます。
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon>
<tabs>
<tab idMso="TabDeveloper" visible="false"/>
<tab idMso="TabView" visible="true">
<group idMso="GroupMacros" visible="false"/>
</tab>
</tabs>
</ribbon>
</customUI>
下図のようになったら「Save」ボタンで保存します。
リボンをカスタマイズすれば、仮に「ファイル」-「オプション」-「リボンのユーザー設定」で「開発」にチェックが入っていても非表示になります。
まとめ
Excelで開発タブを非表示にしてVBAやマクロを変更させない方法を紹介しました。
ここまでやればVBE画面を開くことができないので、ソースを改造されるリスクは減るんじゃないかなーっと思っています。
まあ「Custom UI Editor」を使ってコードを変更されたらVBE画面が開けちゃうんでアレなんですけどね。そこまでして改造したい人は達人だろうからあきらめるしかないかなっと。
他のブックが開けなくなるので操作性の面では使いにくい仕様になるけど、パスワードロックだけでコード変更されるリスクを減らしたいなんて時に使えるかも。
もし不具合があったらコメントください。気が向いたら対応します^^;
おつかれさまでした。