@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

ExcelからIEの起動

1
投稿者投稿内容
もり
会議室デビュー日: 2005/02/16
投稿数: 10
投稿日時: 2008-01-07 19:10
もりです。

windowsVISTAでExcel2007からVBAでIE7を起動しようとした際にエラーが発生します。
(現在、windowsVISTAでの各アプリケーションの起動確認を実施中です)

<<VBAのソース>>
Set oIE=New SHDocVw.InternetExplorer
oIE.Navigate URL文字列
Do Until oIE.ReadyState = READYSTATE_COMPLETE
Doevents
Loop

oIE.ReadyStateにて
「実行エラー -2147417848(80010108)オートメーションエラーです。
 起動されたオブジェクトはクライアントから切断されました」
とのエラーが発生します。
このエラーが発生した際にIEは表示され、結果も問題ないように表示されています。

因みにユーザーアカウントでユーザーアカウント(UAC)を使ってコンピュータの保護に
役立てるをチェックするとエラーが発生します。
又、上記のチェックを外すと正常に処理されます。

現在はwindowsXP上でExcel2003からVBAでIE6を起動していますが、問題はありません。

ユーザーアカウントでユーザーアカウントのチェックをした際に何故エラーが
発生するのでしょうか?又、エラーを発生させない方法はあるのでしょうか?

宜しく御願いします。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2008-01-07 23:17
これに対して有効な対策はありませんね。

Automation 経由で IE を起動した場合、まず medium integrity level で process が作成されます。このときの window は白紙です。

次に対象の URI が low integrity level で開かれます。これが正常に見える window です。

その後に以前起動した medium integrity level の window がいらない場合には、これを強制的に閉じます。

内部ではこのような動作をしています。

Automation が返すのは medium integrity level で起動している window の instance です。したがって、今回のような現象が発生するのです。

回避策というか仕方なくですけど、Shell32.Shell Windows Function 使い、windows を列挙することによって対象の instance を取得することは可能です。

ですが、確実に特定する方法はありません。
_________________
もり
会議室デビュー日: 2005/02/16
投稿数: 10
投稿日時: 2008-01-08 10:44
もりです。

返信有り難う御座いました。
有効な対策が無いとの事ですので、システム的な対応は諦めます。

ユーザーアカウントでユーザーアカウント(UAC)を使ってコンピュータの保護
のチェックを外すと正常に動作しますので、この対応で逃げたいと思います。

ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2008-01-08 13:28
UAC の無効化は必要ありません。

問題となっているのは IE の保護モード (protected mode) です。

接続対象の URL が決まっているのであれば、信頼済み zone へ登録。
限定できないのであれば IE の保護モード (protected mode) を internet zone で無効化。

ですが、protected mode の無効化でも security risk は高まります。

処理の内容にもよりますが、IE 自体を使わない方法を検討してみてはいかがでしょうか?
たとえば、Web から情報を取得するだけの要件ならば、IE を使わなくても XmlHttp とかで用が足りるでしょう。
_________________
もり
会議室デビュー日: 2005/02/16
投稿数: 10
投稿日時: 2008-01-08 20:01
もりです。

>UAC の無効化は必要ありません。
>問題となっているのは IE の保護モード (protected mode) です。

UACの無効/有効で明らかに動作が違います。
無効にすると、処理は正常に実行されます。
UACの無効/有効によって何かが変わっているということでしょうか?

>接続対象の URL が決まっているのであれば、信頼済み zone へ登録。

以前、この会議室で「IEからExcel等のアプリを立ち上げる」件に関して
質問をした結果、社内イントラが対象でしたので
Webサーバを信頼済みサイトにする対応を行いました。

ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2008-01-08 23:54
まず、UAC とはその account が本来持っている権限を制限して、攻撃されても問題が少なくされるためのしくみです。UAC を解剖してみるとその内部で決定的な役割を果たしているのが、integrity level (整合性レベル) と呼ばれるものです。

この integrity level にはいろいろ種類があるのですが、絶対に抑えなければならないのは high, medium, low の三種類です。

UAC が有効な状態では medium integrity level で appliation が動作します。
この状態では、一般の user と同程度の権限しか持っていません。
管理者として作業が必要な場合には、昇格して high integrity level で動作させます。
では、low intergrity level は何なのか?というと今のところ IE でしか使われていないようです。
これは medium integrity level に比べて遥かに多くの制限を受けます。
ただし、これによって不正な site に access した場合に被る被害を最小限にすることができます。
# むしろ、攻撃を仕掛けることがほぼ不可能なくらい厳しいです。

で、今回問題となっているのは、automation 経由で IE を呼び出したとき、最初に立ち上がる window が medium integrity level で起動してから、別の low intergrity level な process で対象の site を開くのに automation が返すのが medium integrity level で開く window というのが問題なわけです。

対象の site が確実に信頼できるのであれば、security level は低下しますが、信頼済みに登録することで、この影響を受けずに済みます。
というのは、Default 設定では、信頼済み zone では protected mode が無効になっているからです。Internet zone は protected mode が default 有効です。

これによって、security level の低下は IE のみに限定されます。
UAC を無効化した場合は影響範囲が全 application に及びます。
_________________
ちゃっぴ@わんくま同盟
ちゃっぴの監禁部屋

[ メッセージ編集済み 編集者: ちゃっぴ 編集日時 2008-01-08 23:55 ]
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-01-09 00:22
Vista や UAC の知識はぜんぜんないのですが、Excel のワークシートの中に、IE のコンポーネント(Microsoft Web Browser)を、貼り付けて(EMBED して)、制御したら、この問題からは逃れられないでしょうか?(逃れられるか逃れられないかは私は分かりませんが、Excel の中に入ってしまうから良さそう思っただけです。)

もしできたとしても、IE が独立したウィンドウにならないので見栄えは悪くなるかもしれませんが、イベントハンドリングのコーディングなどは逆に楽になります。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2008-01-09 00:43
あ、Vista SP1 RC1 v.668 で検証したら、この問題解消されていますね。

なんか、他にも大幅に制限が緩和されているようです。
IE で source を表示しようとするときの昇格 dialog も無くなっているようですし。

SP1 早く release して!って感じですかね。
_________________
1

スキルアップ/キャリアアップ(JOB@IT)