現象
確認できた現象は2点です。- Excel 2016でVBAを実行するとエラー「プロジェクトまたはライブラリが見つかりません。」と表示される
- 参照設定を確認するとエラー「システム レジストリへのアクセスでエラーが発生しました」が表示される
準備するもの
手順
今回の対処は、Microsoft サポート「PRB: VB または VBA で参照を表示するときの 'システム レジストリへのアクセス エラー' メッセージ」に沿って行います。※上記URLではSysInternalsのRegMonを使用すると説明されていますが、現在は提供されていないためProcess Monitorを使用します。
今回の原因は、Microsoft サポート ページに書かれているとおり、レジストリに現ユーザー、およびアクセス権がないため。
そのため、対象となる
- レジストリの特定
- ユーザーおよびアクセス権の追加
Process Monitorを使用しレジストリを特定する
最初に、現象が発生するユーザーで必ずサインインします。次にProcess Monitorを使用しアクセス権がないレジストリを特定します。
- フィルター(Ctrl+L)を設定
- VBAを実行、又は参照設定を表示
- Process MonitorのResult列にある「Access Denied」を確認、行を選択
- Path列上で右クリック→Copy 'HKCR~'を選択
- メモ帳などに貼り付けてメモする
レジストリにユーザーおよびアクセス権を追加する
Process Monitorを使用しアクセス権がないレジストリは以下の通りでした。HKCR:\TypeLib\{57A0E746-3863-4D20-A811-950C84F1DB9B}
他PCのアクセス権を確認したところ、追加するグループおよびアクセス許可が分かりました。
- Users グループ(PC名\Users)
- 読み取りのみ許可
同レジストリ キーを選択、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」を参照する再設定が必要です。