Excel 開発タブを非表示にしてVBAやマクロを変更させない方法

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)」が割り当てられています。

Excel ALT+F11でVBE画面が開く

「OnKey メソッド」の仕様については、下記のサイトが参考になります。

OnKey メソッド (Excel) | Microsoft Docs

他のブックが開かれていないことを確認する

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」のプロパティから、パスワードを設定しましょう。

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」ボタンで保存します。

Custom UI Editorでリボン編集

リボンをカスタマイズすれば、仮に「ファイル」-「オプション」-「リボンのユーザー設定」で「開発」にチェックが入っていても非表示になります。

>>Excel マクロ/VBA画面の表示方法(開発タブ)はこちら<<

まとめ

Excelで開発タブを非表示にしてVBAやマクロを変更させない方法を紹介しました。

ここまでやればVBE画面を開くことができないので、ソースを改造されるリスクは減るんじゃないかなーっと思っています。

まあ「Custom UI Editor」を使ってコードを変更されたらVBE画面が開けちゃうんでアレなんですけどね。そこまでして改造したい人は達人だろうからあきらめるしかないかなっと。

他のブックが開けなくなるので操作性の面では使いにくい仕様になるけど、パスワードロックだけでコード変更されるリスクを減らしたいなんて時に使えるかも。

もし不具合があったらコメントください。気が向いたら対応します^^;

おつかれさまでした。

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