2017-12-13 7 views
2

私はA2:A966から広がったシートに映画のリストを持っています。しかし、私のコードは実行時エラー91を取得します。今すぐ入力ボックスの形で映画の名前を聞いてきます(できるだけ多くのリソースから引っ張られましたが、しかし、理想的にはちょうどA2における映画のリストを実行します:A966とB2に評価のためのデータを引っ張っ:966総評価をC2へ:C966あなたがそれを達成することができます私はIMDB.comの評価と総評をExcelファイルに取り込むマクロを作成しようとしています

Sub test() 
    Dim eRow As Long 
    Dim ele As Object 
    Dim RowCount As Integer 

    Set sht = Sheets("Sheet1") 
    RowCount = 1 
    sht.Range("A" & RowCount) = "IMDB Rating" 
    sht.Range("B" & RowCount) = "Total Reviews" 
    eRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row 
    Set objIE = CreateObject("InternetExplorer.Application") 
    'strSearch = Range("A2") 
    moviename = InputBox("Enter movie name") 

    With objIE 
     .Visible = True 
     .navigate "http://www.imdb.com/" 

     Do While .Busy Or _ 
      .readystate <> 4 
      DoEvents 
     Loop 

     Set nam = .document.getElementsByName("navbar-query") 
     nam.Item(0).Value = moviename 

     .document.getElementsByID("navbar-submit-button").Click 
     .document.getElementsByID("result_text").Click 

     Do While .Busy Or _ 
      .readystate <> 4 
      DoEvents 
     Loop 

     For Each ele In .document.all 
      Select Case ele.classname 
       Case "Result" 
        RowCount = RowCount + 1 
       Case "ratingValue" 
        sht.Range("A" & RowCount) = ele.innertext 
       Case "ratingCount" 
        sht.Range("B" & RowCount) = ele.innertext 
      End Select 
     Next ele 
    End With 

    Set objIE = Nothing 
End Sub 
+0

、あなたは 'A2を宣言することができます:それを行くを与える範囲をA966'、あるいはその範囲の配列を作成して、検索をループして毎回新しいセルを設定します。 – BruceWayne

+0

逆引きを行う前に、あなたのスクリプトがそのサイト@ジョンガンディからのデータを引き出す能力を持っていることを確認する必要があります。それが私が修正したものです。ありがとう。 – SIM

答えて

1

いくつかの方法を。ここにその一つがあります。

Sub imd_data() 

    Dim IE As New InternetExplorer, html As HTMLDocument, ele As Object 

    With IE 
     .Visible = True 
     .navigate "http://www.imdb.com/" 
     Do Until .readyState = READYSTATE_COMPLETE: Loop 
     Set html = .document 
    End With 

    html.getElementById("navbar-query").Value = "Blood Diamond" 
    html.getElementById("navbar-submit-button").Click 
    Application.Wait Now + TimeValue("00:00:05") 
    html.getElementsByClassName("result_text")(0).getElementsByTagName("a")(0).Click 
    Application.Wait Now + TimeValue("00:00:05") 

    For Each ele In html.getElementsByClassName("imdbRating") 
     With ele.getElementsByClassName("ratingValue") 
      If .Length Then r = r + 1: Cells(r, 1) = .Item(0).innerText 
     End With 
     With ele.getElementsByClassName("small") 
      If .Length Then Cells(r, 2) = .Item(0).innerText 
     End With 
    Next ele 

    IE.Quit 
End Sub 

出力:代わりに入力を使用しての

8.0/10 434,144 
+0

Btw、あなたのスクリプトで使った '.getElementsByID'の' s'を気にしてください。 IDは常に単数として使用されます。 – SIM

+0

これは非常に役に立ちますが、私はそれを試してみましたが、Excelシートの特定のセルに出力を入力できるように苦労しています。私のコードを回答として投稿します。 –

0
Sub imd_data() 


Dim IE As New InternetExplorer, html As HTMLDocument, ele As Object 

    With IE 
     .Visible = True 
     .navigate "http://www.google.com/" 
     Do Until .readyState = READYSTATE_COMPLETE: Loop 
     Set html = .document 
     Set sht = Sheets("Sheet2") 
    End With 

    html.getElementById("lst-ib").Value = sht.Range("A2") & " IMDB" 
    html.getElementById("btnK").Click 
    Application.Wait Now + TimeValue("00:00:05") 
    html.getElementsByClassName("rc")(0).getElementsByTagName("a")(0).Click 
    Application.Wait Now + TimeValue("00:00:05") 

    For Each ele In html.getElementsByClassName("imdbRating") 
     With ele.getElementsByClassName("ratingValue") 
      'If .Length Then r = r + 1: Cells(r, 1) = .Item(0).innerText 
      sht.Range("B2") = .Item(0).innerText 
     End With 
     With ele.getElementsByClassName("small") 
      'If .Length Then Cells(r, 2) = .Item(0).innerText 
      sht.Range("C2") = .Item(0).innerText 
     End With 
    Next ele 

    IE.Quit 

End Sub 
+0

私はあなたのスクリプト内でこの 'http:// www.google.com /'リンクを無意識に使ったと思いますか? – SIM

+0

いいえ、IMDBのウェブサイトが非常に重いため、最初の検索でgoogleに切り替える必要はありません –

関連する問題