VBA

2017-07-28 19 views
1

は、私は価格だけ値を返すようにしようとしている場所からのリンクです:https://www.express-supp...VBA

私はにすべての製品グリッド - 詳細を返しVBAスクリプトテーブル値を持っていますワークブックは一部の値が間違った列に入り、ピボットピボットテーブルが生成されません。しかし、このコードをというテーブルを生成するように変更した場合、価格ボックスは値をまったく返しません。

私は、ページ上のHTMLテーブルが順不同であり、互いに順序付けされておらず、データが列から外れていると思います。解決策として、私はVBAがページの項目名と価格だけを返すようにしたいが、全体の多くは返すことはしたくない。どうすればいいのですか?製品・グリッドの詳細を返すように選択する場合、テーブルは、ブック内に戻されるかの

例:ここでは

 With CreateObject("WINHTTP.WinHTTPRequest.5.1") 
    .Open "GET", "https://www.express-supplements.co.uk/catalogsearch/result?q=Optimum+Nutrition", False 
    .send 
    oHtml.body.innerHTML = .responseText 
    Debug.Print 
End With 

ReDim a(1 To 100000, 1 To 60) 
For Each oElement In oHtml.getElementsByClassName("product-grid-details") 
    i = i + 1 
    x = Split(oElement.innerText, vbCr) 

    For ii = 1 To UBound(x) 
     a(i, 1) = nowDate 
     a(i, 2) = nowTime 
     a(i, 3) = weblinks(webX, 1) 
     a(i, 4) = weblinks(webX, 2) 
     a(i, ii + 4) = Trim$(x(ii)) 
    Next 

Next oElement 

    With SHwebdata 
     LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 
     .Cells(LastRow + 1, 1).Resize(i, UBound(a, 2)) = a 
     i = 0 
    End With 

答えて

2

あなたが行く:ここ n/a

はコードです。それを実行し、あなたが求めているように結果を得る:

Sub Web_Data() 
    Dim http As New XMLHTTP60, html As New HTMLDocument 
    Dim topic As HTMLHtmlElement 

    With http 
     .Open "GET", "https://www.express-supplements.co.uk/catalogsearch/result?q=Optimum%20Nutrition", False 
     .send 
     html.body.innerHTML = .responseText 
    End With 

    For Each topic In html.getElementsByClassName("product-grid-details") 
     With topic.getElementsByClassName("product-name") 
      If .Length Then x = x + 1: Cells(x, 1) = .item(0).innerText 
     End With 
     With topic.getElementsByClassName("price") 
      If .Length Then Cells(x, 2) = .item(0).innerText 
     End With 
    Next topic 
End Sub 
+0

あなたは天才です!完璧に動作します! – Martin

+0

この[link](http://www.bodybuildingwarehouse.co.uk/optimum-nutrition?limit=all)を見て、複数のテーブルからアイテム名と価格を返すことが可能かどうかをご覧くださいちょうどあなたが投稿したのと同じアプローチですか? ** getElementsByClassName( "category-products")**と**( "product-name")**および**( "price")**の後に続くべきだと思いますが、何らかの理由で動作しません。 ** Item(0)**数値は戻り値に変更する必要がありますか? – Martin

+0

問題ありません。新しいスレッドを開いてここにリンクを付けてください。私はそれを調べるつもりです。ありがとう。 – SIM