Bar

VBAの参照設定を開くと「システム レジストリへのアクセスでエラーが発生しました」が表示された場合の対処法

Excel 2013で開発したマクロ付ファイルを実行すると「プロジェクトまたはライブラリが見つかりません。」や参照設定を開くと「システム レジストリへのアクセスでエラーが発生しました」のエラーが表示される場合の対処法をメモ。

現象

確認できた現象は2点です。
  • Excel 2016でVBAを実行するとエラー「プロジェクトまたはライブラリが見つかりません。」と表示される

  • 参照設定を確認するとエラー「システム レジストリへのアクセスでエラーが発生しました」が表示される

準備するもの

手順

今回の対処は、Microsoft サポート「PRB: VB または VBA で参照を表示するときの 'システム レジストリへのアクセス エラー' メッセージ」に沿って行います。
※上記URLではSysInternalsのRegMonを使用すると説明されていますが、現在は提供されていないためProcess Monitorを使用します。

今回の原因は、Microsoft サポート ページに書かれているとおり、レジストリに現ユーザー、およびアクセス権がないため。
そのため、対象となる
  1. レジストリの特定
  2. ユーザーおよびアクセス権の追加
を行います。
Process Monitorを使用しレジストリを特定する
最初に、現象が発生するユーザーで必ずサインインします。

次にProcess Monitorを使用しアクセス権がないレジストリを特定します。
  • フィルター(Ctrl+L)を設定
    • Process Name is Excel.exe
    • Path begins with hkcr
  • VBAを実行、又は参照設定を表示
  • Process MonitorのResult列にある「Access Denied」を確認、行を選択

  • Path列上で右クリック→Copy 'HKCR~'を選択
  • メモ帳などに貼り付けてメモする
レジストリにユーザーおよびアクセス権を追加する
Process Monitorを使用しアクセス権がないレジストリは以下の通りでした。
HKCR:\TypeLib\{57A0E746-3863-4D20-A811-950C84F1DB9B}
本当にレジストリにアクセス権がないか確認すると、予定どおりアクセスが拒否されました。

他PCのアクセス権を確認したところ、追加するグループおよびアクセス許可が分かりました。
  • Users グループ(PC名\Users)
  • 読み取りのみ許可

一度サインアウトしAdministrator権限のユーザーでサインインします。
同レジストリ キーを選択、Usersグループを追加、アクセス権を付与します。

再度本現象が発生したユーザーでサインインしExcelのVBAを実行します。
エラーが出なければ作業は完了です。
余談:参照設定に参照不可が出ていたら
Excel 2013とExcel 2016ではMicrosoft Excel xx Object Libraryが異なります。
Excel 2016で作成したマクロ付Excel ファイルをExcel 2013で実行するとVBAは正常に動作しません。参照設定を確認すると、下記画像のように参照不可となります。
Excel 2013で使う場合は、「Microsoft Excel 15.0 Object Library」を参照する再設定が必要です。