最近Excel等のVBA開発画面において「サブジェクトは指定された操作に対して信頼されていません。」というエラーが発生するようになっています。
本書では、その原因と対応策について解説します。
再現方法
VBEにフォームモジュールを追加して、ツールボックスに「その他のコントロール」を追加し、ListViewやTreeViewやProgressBarコントロールを設置しようとしたときに発生します。
--------------------------- Microsoft Visual Basic for Applications --------------------------- サブジェクトは指定された操作に対して信頼されていません。 --------------------------- OK ヘルプ ---------------------------
原因
Microsoftがセキュリティ強化のために ActiveX を既定で無効化したことが原因です。
買い切り版のExcel 2024では10月の出荷時点から無効化していましたが、Microsoft365サブスク版のExcelにも2025年4月のアップデートから適用が始まっています。
また、2025年2月時点ではユーザーフォームへの影響は確認できませんでしたが、2025年7月現在このような問題が確認されました。 (筆者はMicrosoft 365 Excel バージョン2506 ビルド 16.0.18925.20076 32bit版で確認しました。)
企業ではアップデートを数ヶ月遅らせていることが多いため、今後続々と対象者が増えていくと予想されます。
背景
ActiveXは非常に古い技術で、動作が軽くて強力な機能を備えたActiveXコントロールが多数存在します。
(Microsoftが公式で出しているListViewなどは大丈夫だと思いますが)、脆弱性があってもアップデートが行われていないものがあってもおかしくありません。何らかの事情で脆弱性に気がついてもセキュリティ対策できないという状況になっているものもあるかもしれません。
Microsoftとしては、Officeマクロを使用したウイルスが猛威を振るう中、脆弱性のあるActiveXを維持することで攻撃に活用されるのを未然に防ぎたいという狙いがあると考えられます。
解決策
機能が無効化されているだけなので、なくなったわけではありません。
Officeのオプションにて設定を変更することで、簡単に有効化することができます。
ファイル
オプション
トラストセンター > トラストセンターの設定
ActiveXの設定を開くと、問題が起きている環境では「警告を表示せずにすべてのコントロールを無効にする(&D)」にチェックが入っていると思います。
「先に確認メッセージを表示してから、初期化に危険が伴うコントロールには制限を強化し、初期化しても安全なコントロールには最低限の制限を適用して有効にする」にチェックを入れて「OK」を2つ押して閉じると変更完了です。
(下に行くほど制限が緩くなりますが、ListViewやTreeViewを使いたいだけならば上から2番目のチェックで十分ですので、過剰に下げないほうが良いでしょう)
改善が見られない場合は、Officeを再起動してみてください。
再発防止策
設定を行ったパソコンは大丈夫ですが、マクロを利用する全てのパソコンでこの設定を行わなくてはいけません。
そのため、上記の手順を個別に行うか、上記の設定変更を司るレジストリキーの変更コマンドを配布して効率的に設定変更すると良いでしょう。
ただし、既定値が変更されたわけなので、今後もアップデートやOfficeの再インストールなどで、再適用される懸念は拭えません。
理想としてはシステム管理者と協力してグループポリシーなどを配布し、変更のタイミングを会社全体で掌握しましょう。
レジストリの変更
レジストリキー
HKEY_CURRENT_USER\Software\Microsoft\Office\Common\Security\DisableAllActiveX
を 0 に変更することによって無効化を解除できます。
もしもPowerShellで変更するならば、以下のコマンドを実行します。(特権昇格不要)
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Office\Common\Security" -Name "DisableAllActiveX" -Value 0
もしもコマンドプロンプトで実行するならば、以下のコマンドで大丈夫です。
reg add "HKCU\Software\Microsoft\Office\Common\Security" /v DisableAllActiveX /t REG_DWORD /d 0 /f
DisableAllActiveX = 0
がActiveXを利用できる設定で、DisableAllActiveX = 1
がActiveXを全て無効化する設定です。
つまり、上記コマンド最後にある 0
を 1
にすることで無効化にすることができます。
(ちなみに、オプション画面にあった4つの選択肢の下2つは、0にした上で更に別のキーのフラグも変更が必要です)
このレジストリはOfficeの起動中に更新されることあるため、必ずOfficeを終了させた状態でレジストリ変更を行ってください。
そして、変更したレジストリの内容を反映させるにはOfficeの再起動が必要です。
グループポリシーの変更(Windows 10/11 Professional限定)
ローカルグループポリシーエディタを開いて、「ユーザーの設定」→「管理用テンプレート」→「Microsoft Office 2024」→「セキュリティ設定」内の「すべてのActiveXを無効にする」を無効にします。
参考
窓の杜 - 2025年4月よりActiveXが既定無効、Microsoft 365のWord、Excel、PowerPoint、Visioで
Microsoft Support - ActiveX controls are disabled by default in Microsoft 365 and Office 2024
Microsoftサポート - ActiveX コントロールは、Microsoft 365 および Office 2024 では既定で無効になっています
ADO(ActiveX Data Objects)について
データベースの接続に使われることの多いADO(ADODB)も名前にActiveXを冠していますが、コントロール(GUIでシートやフォームに設置するオブジェクト)ではないため、ハックできる窓口が少なく、そこまで心配しなくて良いという認識です。 (そもそも公式の声明文で対象は【コントロール】って言ってますよね)
ただし、私が2月に本件について調査した時点では、ワークシート上にActiveXコントロールを置くことができないだけで、VBAのフォームに設置することはできていました。 そう考えると、急に規制が厳しくなる可能性があるということは十分認識しておいたほうが良さそうです。
ちなみに声明文の対象ソフトの中にAccessが含まれていないので、業務システムに使われることが多いAccessVBAで規制される未来は更に遠いと考えられます。
まとめ
というわけで、良きExcelライフをお過ごしください。