🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

89871閲覧

IE操作でオートメーションエラー

lovely.wolf

総合スコア15

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

2クリップ

投稿2016/01/29 06:29

お世話になっております。
ExcelVBAからIEを操作していたのですが、オートメーションエラーが発生するようになりました。

Win7, Excel2007, IE11

実行時エラー:-2147417848(80010108)
オートメーションエラーです。
起動されたオブジェクトはクライアントから切断されました。

Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
Declare Function ShowWindow Lib "user32.dll" (ByVal hwindow As Long, ByVal cmdshow As Long) As Long
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub 番号取得()

Dim ie As Variant, Obj As Variant
Dim shtData As Worksheet
Dim check As HTMLInputElement

Application.DisplayAlerts = False
Set ie = CreateObject("InternetExplorer.Application")

ie.Visible = True
ie.navigate "https://kaishi.e-tax.nta.go.jp/SU_APP/lnk/kaishiShinkiKojin?SS000120"
Sleep 8000

ie.document.all.SU_next.Click ← ここでエラー
Sleep 8000

...続く

一週間前は正常に動作していたのを確認しています。
本日使用しようとしたら、エラーになってしまいました。

どこを直せば良いのかご教授ください。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

解決できたので追記しておきます。

Set ie = CreateObject("InternetExplorer.Application")

Set ie = New InternetExplorerMedium
に変更したところ、動きました。

大変お騒がせいたしました。

投稿2016/02/02 08:37

lovely.wolf

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

まだエラーは起きますが...
どうやらタグをつけたExcelでもVBAの問題でもないという事なので
いったん閉めたいと思います。

thom.jpさん
いろいろご親切にありがとうございました。
本当に感謝、感謝です。

投稿2016/02/02 01:30

lovely.wolf

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

掲示いただいたコードを私も試してみましたが、オートメーションエラーになりました。
厄介なエラーですね。

しかし、Sleep 8000という待ち方を変更することでエラー回避できました。
「適当にSleepでタイミングを見て」という待ち方は偶発的な要素に左右されますので、以下のようにIEのステータスBusyとreadyStateのコンプリート(4)を待つと良いかと思います。

lang

1IE.Navigate "https://kaishi.e-tax.nta.go.jp/SU_APP/lnk/kaishiShinkiKojin?SS000120" 2Do While IE.Busy Or IE.readyState <> 4 3 DoEvents 4Loop 5IE.document.all.SU_next.Click

あと、エラートラップでクリックできるまで待つという手法もあります。

lang

1 'ボタンがクリックできるまでエラートラップとResumeを繰り返す。 2 On Error GoTo Err 3 IE.document.all.SU_next.Click 4 On Error GoTo 0 5 Exit Sub 6Err: 7 DoEvents 8 Resume

この方法はタイムアウトなり、エラーのトラップ限界数なりを工夫しないと、本当に読み込み失敗したときに無限ループに陥ってしまいますので、注意です。
あと、エラー一回あたりにDoEvent1回挟んでいるだけですが、Sleepで1秒ほど待ってリトライでも良いかと。

前者のIEステータスと組み合わせるとなお確実性が増すかと思われます。

投稿2016/01/30 03:34

thom.jp

総合スコア686

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lovely.wolf

2016/02/01 02:23

レスありがとうございます。 せっかくご提示いただいているのに申し訳ないのですが、私のところでは オートメイションエラーとなってしまいます。 そこで、エラー原因特定のため分けて実行してみました。 … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ Do While ie.Busy ←ここでエラー DoEvents Loop 実行時エラー430 クラスはオートメーションまたは予測したインターフェイスをサポートしていません。 … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ 試しに、 Do While ie.readyState <> 4 ←ここでエラー DoEvents Loop 実行時エラー430 クラスはオートメーションまたは予測したインターフェイスをサポートしていません。 … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ … ☆ と両方エラーとなってしまいました。 エラートラップを仕掛ける方法ですが、無限ループに陥ってしまっているようです。 F8キー押しっぱなしで動作を見てみたところ、ずっとループしてしまっています。 お時間のある時に、再度ご教授願えないでしょうか。 よろしくお願いいたします。
lovely.wolf

2016/02/01 02:25

すみません。間違えてしまいました。 Busyのエラーは、下記の誤りです。 実行時エラー:-2147417848(80010108) オートメーションエラーです。 起動されたオブジェクトはクライアントから切断されました。
lovely.wolf

2016/02/01 07:34

いろいろ悩んでいるのですが... 試しにURLをyahooやterateilのモノに変えてみるとエラーは起きません。  ie.navigate "https://teratail.com/tags/Excel"  Do While ie.Busy Or ie.readyState <> 4 DoEvents Loop これは、e-TaxのHPの作りが変わってしまったと理解したほうが良いのでしょうか。
thom.jp

2016/02/01 10:44

私の環境だと、何度やってもうまくいきます。 一度IEのキャッシュクリアをしてみてください。 あとは、アドインを一旦全て無効にしてみてどうか等、環境を疑った方が良いかもしれません。
lovely.wolf

2016/02/02 01:29

ありがとうございます。 ・IEのキャッシュクリア、アドインそのまま エラーの種類が若干変わりました。 実行時エラー -2147467259(80004005) Busyメソッドは失敗しました。IWebBrowser2オブジェクト ・IEのキャッシュクリア、アドインすべて無効 上記と同じエラーでした。 >環境を疑った方が良いかもしれません ...とのコトなので、一度IT担当さんに確認してみます。 またなにかありましたら、よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問