CreateObject("Scripting.FileSystemObject")オートメーションエラーで嵌まった
環境はWindows7 pro x86 sp1。
vbやvbaでCreateObject("Scripting.FileSystemObject")を実行すると、
「オートメーションエラーです。ライブラリは登録されていません。」
とのエラー。
前々からエラーになるのは知っていたが、どうしても必要なオブジェクトではないので
だましだましコーディングで回避していた。
しかし、いつまでも放っておくのは気持ちが悪いので
真剣に解決策を模索してみた。
scrrun.dllのレジストリ登録がうまくいっていないのは知っていたが、
何度も試したregsvr32 scrrun.dllを再度実行。
「うまくいったよ」メッセージが出るがやっぱり現象は変わらない。
scrrun.dllの依存ファイルはMSVCRT.dll、ScrrnJP.dllの様だがどちらもSystem32に存在する。
regsvr32 /u scrrun.dllでレジストリ登録削除を試みると、
「dllUnRegisterServerがエラーコード0x8002801dを返した」とのエラーとなる。
検索しても、このエラーコードの意味はよくわからなかったが、レジストリがらみなのは間違いない。
別のXPマシンのエクセルvbaではCreateObject("Scripting.FileSystemObject")でエラーが発生しないので、
両方のマシンのレジストリをキーワード「scrrun.dll」で検索し、違いを探ることにする。
で結局、違いは、
[HKEY_CLASSES_ROOT\TypeLib\{420B2830-E718-11CF-893D-00A0C9054228}]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{420B2830-E718-11CF-893D-00A0C9054228}]
だった。
Windows7のほうは、[HKEY_CLASSES_ROOT\TypeLib\{420B2830-E718-11CF-893D-00A0C9054228}]は、
存在するが、中身は空っぽで、なおかつフルコントロール権限が無い。
また、[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{420B2830-E718-11CF-893D-00A0C9054228}]は、
存在すらしない。
[HKEY_CLASSES_ROOT\TypeLib\{420B2830-E718-11CF-893D-00A0C9054228}]のアクセス権を
フルコントロールに設定し、XPからエクスポートしたレジストリ情報を取り込んで無事解決。
なおレジストリのアクセス権変更は、
変更するレジストリキーを右クリック→「アクセス許可」→「グループ名またはユーザ」でhogehogeを選んで
→「詳細設定」ボタン→「所有者」タブ→「所有者の変更」でhogehogeを選んで「OK」
→「hogehogeのアクセス許可」で「フルコントロール」にチェック→「OK」

vbやvbaでCreateObject("Scripting.FileSystemObject")を実行すると、
「オートメーションエラーです。ライブラリは登録されていません。」
とのエラー。
前々からエラーになるのは知っていたが、どうしても必要なオブジェクトではないので
だましだましコーディングで回避していた。
しかし、いつまでも放っておくのは気持ちが悪いので
真剣に解決策を模索してみた。
scrrun.dllのレジストリ登録がうまくいっていないのは知っていたが、
何度も試したregsvr32 scrrun.dllを再度実行。
「うまくいったよ」メッセージが出るがやっぱり現象は変わらない。
scrrun.dllの依存ファイルはMSVCRT.dll、ScrrnJP.dllの様だがどちらもSystem32に存在する。
regsvr32 /u scrrun.dllでレジストリ登録削除を試みると、
「dllUnRegisterServerがエラーコード0x8002801dを返した」とのエラーとなる。
検索しても、このエラーコードの意味はよくわからなかったが、レジストリがらみなのは間違いない。
別のXPマシンのエクセルvbaではCreateObject("Scripting.FileSystemObject")でエラーが発生しないので、
両方のマシンのレジストリをキーワード「scrrun.dll」で検索し、違いを探ることにする。
で結局、違いは、
[HKEY_CLASSES_ROOT\TypeLib\{420B2830-E718-11CF-893D-00A0C9054228}]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{420B2830-E718-11CF-893D-00A0C9054228}]
だった。
Windows7のほうは、[HKEY_CLASSES_ROOT\TypeLib\{420B2830-E718-11CF-893D-00A0C9054228}]は、
存在するが、中身は空っぽで、なおかつフルコントロール権限が無い。
また、[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{420B2830-E718-11CF-893D-00A0C9054228}]は、
存在すらしない。
[HKEY_CLASSES_ROOT\TypeLib\{420B2830-E718-11CF-893D-00A0C9054228}]のアクセス権を
フルコントロールに設定し、XPからエクスポートしたレジストリ情報を取り込んで無事解決。
なおレジストリのアクセス権変更は、
変更するレジストリキーを右クリック→「アクセス許可」→「グループ名またはユーザ」でhogehogeを選んで
→「詳細設定」ボタン→「所有者」タブ→「所有者の変更」でhogehogeを選んで「OK」
→「hogehogeのアクセス許可」で「フルコントロール」にチェック→「OK」

スポンサーサイト
2014/04/22 Tue. 14:52 |
trackback: -- |
comment: --
| edit
| h o m e |