#はじめに
ExcelのデータをWEBページに転記するためのVBAを書いていた時にハマったので、メモ書きです。
##ハマったソース(イメージです)
Sub IE_OpenUrl()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
With IE
.Visible = True
.Navigate "(ここにURLを入力)"
Set objectelement = IE.Document
With objectelement
.GetElementById("btn").Click
End With
End Sub
#結論
Excel VBAでIEを操作しようとした際に、下記のようなメッセージが表示されたら、開いているURLがIEの「信頼済みサイト」に登録されているからかもしれません。(特に操作対象が社内のイントラネットだったりすると怪しい)
実行時エラー'-2147467259
オートメーションエラーです。
エラーを特定できません。
エラーになる理由は下記のページが詳しいです。
- IE の保護モードの違いによって整合性レベルの切り替えの有無が変わりオートメーションの操作に影響が出る場合がある - デクノスティック
- internet explorer - Excel VBA Controlling IE local intranet - Stack Overflow
Here's what's happening. When your browser internally "jumps" to a different security zone - from say a local address to an inTRAnet address or to an inTERnet address - IE closes/drops the current process of IE and opens another one with tighter security.
セキュリティゾーンをまたぐ場合に、セッションを維持することができないことが原因のようです。
#対策
##信頼済みサイトから該当のURLを削除する
簡便ですが、故あって信頼済みサイトに登録されているのでしょうから、オススメしません。
##InternetExplorerMediumを使う
CreateObject("InternetExplorer.Application")
ではなく、New InternetExplorerMedium
を利用します。
明示的に、Integrity Level(整合性レベル)が中(MediumIL)でインスタンス化することで切り替えが発生せずに操作を継続できるようです。(まだ理解が曖昧)
'Microsoft Internet Controlsが必要なので、ツール->参照設定->Microsoft Internet Controlsにチェックを入れて「OK」
Sub OpenIEAndSetValue()
Dim IE As Object
Set IE = New InternetExplorerMedium
'中略
End Sub
#参考サイト