質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

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

Q&A

2回答

5716閲覧

エラーを吐く場合と吐かない場合の原因

na58chan

総合スコア13

VBA

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

0グッド

0クリップ

投稿2020/03/09 12:36

VBAでスクレイピングしている初心者です。

Set objIE = CreateObject("Internetexplorer.Application")の初回、Objectを開放した2回目のSetの際などにもエラーガ表示されてしまいます。何も起きず、実行できる場合もあるのですが、考えうる原因・対応策は何かありますでしょうか?
なお、エラーの際は以下のようなメッセージが表示されます。
実行時エラー "ー2125469506 (8150002e)
このエラーコードに関連付けられたテキストが見つかりませんでした。

Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) Sub test() Dim BasicWb As Workbook Set BasicWb = ActiveWorkbook Dim URL As String 'URL Sheets("Sheet1").Activate URL = ActiveSheet.Range("B3").Value 'URLを代入 Dim objIE As InternetExplorer 'IEオブジェクトを準備 Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット objIE.Visible = True 'IEを表示 objIE.navigate URL 'IEでURLを開く Call WaitResponse(objIE) '読み込み待ち Dim j As Long For j = 1 To 1 Call ieJS(objIE, "scrollTo(0," & objIE.document.body.scrollHeight & ")") Sleep 1000 Next j Dim htmlDoc As HTMLDocument 'HTMLドキュメントオブジェクトを準備 Set htmlDoc = objIE.document 'objIEで読み込まれているHTMLドキュメントをセット Dim BeforeStr(10) As String '取り出す数 Dim i As Long Dim arMod(2) As Long Dim Wb As Workbook Set Wb = Workbooks.Add For i = 0 To 10 BeforeStr(i) = htmlDoc.getElementsByClassName("SearchList_item")(i).innerHTML arMod(0) = InStr(BeforeStr(i), "href") + 6 arMod(1) = InStr(BeforeStr(i), "target=") - 2 Wb.Worksheets("Sheet1").Cells(i + 1, "A").Value = Mid(BeforeStr(i), arMod(0), (arMod(1) - arMod(0))) Next i objIE.Quit Set objIE = Nothing Set htmlDoc = Nothing BasicWb.Activate Sheets("Template").Rows(1).Copy Wb.Activate Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Sheet2" Sheets("Sheet2").Rows(1).PasteSpecial (xlPasteAll) Sheets("Sheet1").Activate Dim desc As String Dim Price As String 'For i = 1 To Worksheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row 'URLの数だけ処理 For i = 1 To 1 Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット objIE.Visible = True objIE.navigate Wb.Worksheets("Sheet1").Cells(i, "A").Value Call WaitResponse(objIE) Set htmlDoc = objIE.document

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

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

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

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

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

guest

回答2

0

IE操作時のオートメーションエラーと戦う の記事が参考になると思います。

投稿2020/03/09 12:58

coco_bauer

総合スコア6915

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

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

0

coco_bauerさんの回答にあるように、IEオブジェクトはQuitしてもプロセスが
残っていることがあります。このプロセスが削除される前に再度オブジェクト
をCreateしようとすると、QuitしたIEを再使用しようとして使用できずエラー
となるようです。

おそらく削除はVBAの動作と非同期に行なわれていると思いますので、Waitも確
実とは言えません。

対策としてプロセスを探して削除するのが正道だとは思いますが
簡単には…

(a)作成したオブジェクトを使い回す(同じオブジェクトでNavigateを繰り返す)
または
(b)使う分だけのIEオブジェクトを最初にCreateする

で回避できるかと思います。

投稿2020/03/11 05:08

h.horikoshi

総合スコア505

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問