トップ回答者
CreateObject("InternetExplorer.application") でサーバーの実行に失敗しました 80080005

質問
-
タイトルについて質問します。
Excel2002 VBAでIEを操作するマクロを作って利用していたのですが、2020/7/6までは使用できていました。
しかし久しぶりに動かしたら「サーバーの実行に失敗しました」(80080005)エラーが発生しました。
VBAだけでなく、VBSもCreateObject("InternetExplorer.application") で「ActiveXコンポーネントはオブジェクトを作成できません」(800A01AD)とエラーになります。
同じVBSがWindows10 32bit intel Atomでは正常に動作します。このことから、VBAの問題というよりは、Internet Explorerの環境?の問題である感じがします。
ちなみに、以下のCreateObjectの実行は正常に動作します。これは私がマクロで使用しているものの抜粋です。
・Set oADO = CreateObject("ADODB.Stream")
・Set reg = CreateObject("VBScript.RegExp")
・Set objShell = CreateObject("Shell.Application")
・Set objFILE = CreateObject("DSOFile.OleDocumentProperties")
・Set fs = CreateObject("Scripting.FileSystemObject")
・Set oWsh = CreateObject("WScript.Shell")
大変困っています。同じ事象で解決された方、ヒントでも構いませんので何卒ご教示ください。
よろしくお願いいたします。
【環境】-------------------------------
Windows10 64bit Intel i5 8GB(mem)
Office2002
【試したこと】-------------------------
ネットの情報をもとに以下を試しましたが改善しませんでした。
・Excelの再インストール
・IEの再インストール
・7/6以降に導入されたWindowsUpdateの削除(wusa.exe)を試みたが削除できず
・.NetFrameworkの削除
・レジストリの書き換え
\\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windowsの SharedSection=512追加
・ウィルスソフトの削除
・ローカルユーザの作成- 編集済み iizy 2020年9月12日 4:29
回答
-
InternetExplorerMedium の方は起動したのですね。
対処案が見つかったようで良かったです。VBA で参照設定 "Microsoft Internet Controls" を加えた状態であれば、下記の構文も利用できるかと思います。
' Set IEm = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}") Set IEm = New SHDocVw.InternetExplorerMedium ' Set IEn = GetObject("new:{0002DF01-0000-0000-C000-000000000046}") Set IEn = New SHDocVw.InternetExplorer
ちなみによくわからないのですが、「D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E」はPCが変わっても同じなのでしょうか?
GUID は変化しませんので、現行の環境であれば利用できます。
以下、参考情報。
- 組み込み系プログラマの覚書 - IE8以降でイントラネットサイトを参照する
- Windows 疑問・トラブル即解決 - 【まとめ】オートメーションエラーが Excel VBA による IE11の操作で発生した場合の対処
- Default Integrity Level and Automation
- デクノスティック - IE の保護モードの違いによって整合性レベルの切り替えの有無が変わりオートメーションの操作に影響が出る場合がある
- Japan Developer Support Internet Team Blog - 保護モードと拡張保護モード
- Musings of an Application Packager - Integrity Levels and Internet Explorer Automation
- 編集済み 魔界の仮面弁士MVP 2020年9月12日 9:26
- 回答としてマーク iizy 2020年9月19日 4:49
すべての返信
-
長時間起動させ続けた端末上で起動エラーが発生していたけれども、再起動したら復活するようになった…という事例は聞いたことがあるのですが、再インストールやアンインストールをいろいろ試しておられるようなので、今回は該当しなさそう。
この 2 ヶ月の間で何が変わったかといっても、なかなか追跡できないですよね。IE11 の Enterprise モードを有効化したとか、何か明確な作業があったわけでも無いのでしょうし。
Internet Explorer のアドインを一時的に無効化してみたり、シェルエクステンションを OFF にしてみる といった作業で回復するのであれば、そうした拡張機能が要因と言えるのでしょうけれども…。
同じ事象で解決された方、ヒントでも構いませんので何卒ご教示ください。
当方では発生したことが無く、現時点で思い当たる点も無いため、あまりお力にはなれなさそうです…。
しかし久しぶりに動かしたら「サーバーの実行に失敗しました」(80080005)エラーが発生しました。
VBAだけでなく、VBSもCreateObject("InternetExplorer.application") で「ActiveXコンポーネントはオブジェクトを作成できません」(800A01AD)とエラーになります。VBA と VBS でエラーコードが異なるようですが、PowerShell ではどうでしょうか?
$IE = New-Object -ComObject InternetExplorer.Application $IE.Visible = $true $IE.Navigate2("about:blank")
また、GetObject を使った場合、エラーメッセージは変化しますか?
Set IEm = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}") IEm.Visible = True IEm.Navigate2 "about:blank" Set IEn = GetObject("new:{0002DF01-0000-0000-C000-000000000046}") IEn.Visible = True IEn.Navigate2 "about:blank"
あるいは VBA から参照設定をしておいて、CreateObject の代わりに、
「New InternetExplorer」もしくは「New InternetExplorerMedium」を使った場合はどうでしょうか。0x80080005 を表すエラー定数は CO_E_SERVER_EXEC_FAILURE であるため、この定数名で検索してみたら、このような情報がありました。起動に失敗してこのエラーに至る要因としては様々で、レジストリ登録の破損のほか、CPU 負荷要因や DCOM 構成のセキュリティ設定などが挙げられていました。
具体的な対処策があるわけでは無いのですが、DCOMCNFG.exe の設定次第では、IE や Office を遠隔から操作することもできていたようなので、セキュリティ設定が変更されてしまったとか…?
-
魔界の仮面弁士様
返信ありがとうございます。お名前は昔からネットで拝見していましたがその方からアドバイス頂けるとは少し感動しております。
さて、ご指摘いただいた内容ですが、素晴らしいです。動きました。
(1)Powershell
問題なく動作しました。
(2)GetObject_1つめ
問題なく動作しました。
(3)GetObject_2つめ「ActiveXコンポーネントはオブジェクトを作成できません。」(429)エラー発生試したのは以上3ケースです。
このことから何が言えるのか分かりませんが、GetObjectに書き換えれば何とかマクロを継続利用できそうです。実はエラーが発生してから1か月ほどあれこれ試していたのですが、こちらに質問してあっという間に視界が開けて感動しております。
ありがとうございました。ちなみによくわからないのですが、「D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E」はPCが変わっても同じなのでしょうか?
とりあえず希望が見えました。感謝です。 -
InternetExplorerMedium の方は起動したのですね。
対処案が見つかったようで良かったです。VBA で参照設定 "Microsoft Internet Controls" を加えた状態であれば、下記の構文も利用できるかと思います。
' Set IEm = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}") Set IEm = New SHDocVw.InternetExplorerMedium ' Set IEn = GetObject("new:{0002DF01-0000-0000-C000-000000000046}") Set IEn = New SHDocVw.InternetExplorer
ちなみによくわからないのですが、「D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E」はPCが変わっても同じなのでしょうか?
GUID は変化しませんので、現行の環境であれば利用できます。
以下、参考情報。
- 組み込み系プログラマの覚書 - IE8以降でイントラネットサイトを参照する
- Windows 疑問・トラブル即解決 - 【まとめ】オートメーションエラーが Excel VBA による IE11の操作で発生した場合の対処
- Default Integrity Level and Automation
- デクノスティック - IE の保護モードの違いによって整合性レベルの切り替えの有無が変わりオートメーションの操作に影響が出る場合がある
- Japan Developer Support Internet Team Blog - 保護モードと拡張保護モード
- Musings of an Application Packager - Integrity Levels and Internet Explorer Automation
- 編集済み 魔界の仮面弁士MVP 2020年9月12日 9:26
- 回答としてマーク iizy 2020年9月19日 4:49
-
iizyさん、こんにちは。フォーラムオペレーターのKumoです。
MSDNフォーラムにご投稿くださいましてありがとうございます。
本件、魔界の仮面弁士さんより参考になる投稿が寄せられたようでなによりです。
[回答としてマーク]機能は設定された投稿が後から参照しやすくなりますので、
同じ問題でお困りの方のためにも参考になった投稿に設定いただけますと幸いです。
お手数ですが、ご協力の程どうかよろしくお願いいたします。
引き続きMSDNフォーラムをご利用いただけますようお願い申し上げます。MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~