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

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

ただいまの
回答率

90.46%

  • VBA

    2397questions

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

HTMLElementCollection 実行時エラー 型が一致しません 原因

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 3,760

YusukeOkane

score 1

前提・実現したいこと

EXCEL VBAで特定WEBページからデータを収集するシステムを作ってます。
HTMLから要素を抜き出す機能を実装中に以下エラーが発生しました。

発生している問題・エラーメッセージ

実行時エラー’13’
型が一致しませn

該当のソースコード

Option Explicit

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private objIE As InternetExplorer

Sub main()
Set objIE = New InternetExplorer
Dim url

url = "https://www.amazon.co.jp/gp/bestsellers/books/3257503051/"

objIE.Visible = True
objIE.Navigate2 (url)

'読み込み完了待ち

While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True
DoEvents
Sleep 100
Wend
Sleep 100

Dim objDoc As HTMLElementCollection
Set objDoc = objIE.document
Dim element As IHTMLElement

Dim row '書き込むセルの行数
row = 1
For Each element In objDoc.getElementsByClassName("a-fixed-left-grid-inner")
'シートに取得したタイトルの書き込み
Worksheets(1).Cells(row, 1) = row
Worksheets(1).Cells(row, 2) = element.Children(1).Children(1).innerText
row = row + 1
Next element

objIE.Quit
Set objIE = Nothing
End Sub

試したこと

プログラム自体は、以下URLの最下段「サポート情報欄」に掲載されているもの(2-1_対応版.txt)を使用。
http://www.sbcr.jp/products/4797389029.html

プログラム素人のため、この先、どう進めてよいのか分かりません。

補足情報(言語/FW/ツール等のバージョンなど)

Winodows10 バージョン1607

Excel2010(Microsoft Office Home and Business2010)

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

Dim objDoc As HTMLElementCollection
Set objDoc = objIE.document 

ここをコメントアウトして、それ以降のコードの objDoc を objIE.document に置き換えて実行してみてください

For Each element In objDoc.getElementsByClassName("a-fixed-left-grid-inner")

置換 ↓

For Each element In objIE.document.getElementsByClassName("a-fixed-left-grid-inner") 

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/14 00:14

    適格なアドバイスありがとうございました。
    無事、情報を収集する事ができました。

    ところで、今回ご教示いただいたコメントアウトや置換については、
    どのような環境の場合に実施するのでしょうか?

    環境によっては、そのまま起動する場合もあるかと思うので知りたいです。
    よろしくお願いします。

    キャンセル

0

当方、windows7 64bit、excel2010 64bitの環境ですが、コピペのままで動きました。
"objIE"の型を調べてみたところ(下記参照)、HTMLDocument型だったため、"Dim objDoc As HTMLElementCollection"を"Dim objDoc As HTMLDocument"に変えてみてはどうでしょうか?

VBA

Sub test2()
    Dim url
    url = "https://www.amazon.co.jp/gp/bestsellers/books/3257503051/"

    Dim objIE As InternetExplorer
    Set objIE = New InternetExplorer
    objIE.Visible = True
    objIE.Navigate2 (url)

    '読み込み完了待ち
    Dim i
    i = 0
    While objIE.readyState <> 4 Or objIE.Busy = True
        i = i + 1
        DoEvents
        Sleep 100
        If i Mod 10 = 0 Then
          Debug.Print "まだ"
        End If

    Wend
    Sleep 100

    Debug.Print TypeName(objIE.document)
    objIE.Quit
    Set objIE = Nothing
End Sub


イミディエイトウィンドウ

HTMLDocument

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/09 14:51

    larkpiaさn

    早々のご回答ありがとうございました。
    教えていただいた通り、プログラムを書き換えて実行しましたが、
    同一個所で同一のエラーメッセージが表示されました。

    ■プログラム
    Option Explicit

    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


    Private objIE As InternetExplorer

    Sub main()
    Set objIE = New InternetExplorer
    Dim url

    url = "https://www.amazon.co.jp/gp/bestsellers/books/3257503051/&quot;

    objIE.Visible = True
    objIE.Navigate2 (url)



    '読み込み完了待ち

    While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True
    DoEvents
    Sleep 100
    Wend
    Sleep 100

    'Dim objDoc As HTMLElementCollection 64bit環境
    Dim objDoc As HTMLDocument '32bit環境
    Set objDoc = objIE.document
    Dim element As IHTMLElement

    Dim row '書き込むセルの行数
    row = 1
    For Each element In objDoc.getElementsByClassName("a-fixed-left-grid-inner")
    'シートに取得したタイトルの書き込み
    Worksheets(1).Cells(row, 1) = row
    Worksheets(1).Cells(row, 2) = element.Children(1).Children(1).innerText
    row = row + 1
    Next element

    objIE.Quit
    Set objIE = Nothing
    End Sub

    ■エラーメッセージ
    実行時エラー’13’
    型が一致しません。また、お時間のある時にご返信いただければ幸いです。

    キャンセル

0

エラー箇所は"Dim objDoc As HTMLElementCollection",もしくは"Dim objDoc As HTMLDocument"との理解でよろしいでしょうか?
追記:
失礼、レスを付けようとして間違って回答欄を使ってしまいました。
あと、お使いのwindows10は何ビット環境でしょうか?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/09 23:05

    たびたびのご回答ありがとうございます。
    情報が不足しており、申し訳ございません。
    エラー個所は、以下となります。
    Set objDoc = objIE.document
    Windows10は、64ビットオペレーティングシステムとなっておりました。

    以上、よろしくお願いします。

    キャンセル

  • 2017/04/09 23:32

    objIE.document の型は Debug.Print TypeName(objIE.document)
    としたときに何が表示されるでしょうか?

    また、
      Private objIE As InternetExplorer
    Set objIE = New InternetExplorer

    Dim objIE As Object
    Set objIE = CreateObject("InternetExplorer.Application")
    と変えたらどうでしょうか?

    キャンセル

  • 2017/04/11 02:30

    お忙しい中、度々のご回答ありがとうございます。
    頂いたアドバイスに従って試してみましたが、
    プログラム素人のため、上手く意味をくみ取れていない可能性がございます。
    以下回答をご確認いただければ幸いです。

    ★objIE.document の型は Debug.Print TypeName(objIE.document)
    としたときに何が表示されるでしょうか?
    →以下プログラムを実行する認識で良いでしょうか?
     特にエラー等は発生していないようですが、実行しても何も表示されません。
     実行後、どこを見て確認すればよいのでしょうか?

    Option Explicit

    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


    'Private objIE As InternetExplorer
    Dim objIE As Object

    Sub main()
    'Set objIE = New InternetExplorer
    Set objIE = CreateObject("InternetExplorer.Application")
    Dim url

    url = "https://www.amazon.co.jp/gp/bestsellers/books/3257503051/&quot;

    objIE.Visible = True
    objIE.Navigate2 (url)



    '読み込み完了待ち

    While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True
    DoEvents
    Sleep 100
    Wend
    Sleep 100
    '************************************************************
    Debug.Print TypeName(objIE.document)
    objIE.Quit
    Set objIE = Nothing

    End Sub
    '************************************************************




    ★ Private objIE As InternetExplorer
     Set objIE = New InternetExplorerを
     Dim objIE As Object
     Set objIE = CreateObject("InternetExplorer.Application")
     と変えたらどうでしょうか?

    以下プログラムを実行しましたが、
    やはり、以下エラーメッセージが出力されます。

    ■エラー個所
    Set objDoc = objIE.document

    ■エラーメッセージ
    実行時エラー’13’
    型が一致しません。また、お時間のある時にご返信いただければ幸いです。


    Option Explicit

    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

    'Private objIE As InternetExplorer
    Dim objIE As Object

    Sub main()
    'Set objIE = New InternetExplorer
    Set objIE = CreateObject("InternetExplorer.Application")
    Dim url

    url = "https://www.amazon.co.jp/gp/bestsellers/books/3257503051/&quot;

    objIE.Visible = True
    objIE.Navigate2 (url)



    '読み込み完了待ち

    While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True
    DoEvents
    Sleep 100
    Wend
    Sleep 100


    Dim objDoc As HTMLElementCollection '64bit環境
    'Dim objDoc As HTMLDocument '32bit環境
    Set objDoc = objIE.document
    Dim element As IHTMLElement

    Dim row '書き込むセルの行数
    row = 1
    For Each element In objDoc.getElementsByClassName("a-fixed-left-grid-inner")
    'シートに取得したタイトルの書き込み
    Worksheets(1).Cells(row, 1) = row
    Worksheets(1).Cells(row, 2) = element.Children(1).Children(1).innerText
    row = row + 1
    Next element

    objIE.Quit
    Set objIE = Nothing
    End Sub

    キャンセル

  • 2017/04/11 09:59

    デバッグとはプログラムの動作確認や、指定した位置での値の確認に使えるものです。
    VBAのウィンドウの[表示]→[イミディエイトウィンドウ]でウィンドウの下部に、イミディエイトウィンドウが表示され、プログラムを実行することでDebag.Print() で指定した値が表示されます。上のプログラムではエラーが先に発生し、プログラムが動かない可能性がありますので、何も表示されないときは下記のプログラムを試してみてください。

    Sub test2()
    Dim url
    url = "https://www.amazon.co.jp/gp/bestsellers/books/3257503051/&quot;

    Private objIE As InternetExplorer
    Set objIE = New InternetExplorer
    objIE.Visible = True
    objIE.Navigate2 (url)

    '読み込み完了待ち
    Dim i
    i = 0
    While objIE.readyState <> 4 Or objIE.Busy = True
    i = i + 1
    DoEvents
    Sleep 100
    If i Mod 10 = 0 Then
    Debug.Print "まだ"
    End If

    Wend
    Sleep 100

    Debug.Print TypeName(objIE.document)
    objIE.Quit
    Set objIE = Nothing
    End Sub

    キャンセル

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

  • ただいまの回答率 90.46%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • VBA

    2397questions

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