1

Я новичок в VBA. Моя цель здесь состоит в том, чтобы создать функцию, которая будет показывать самую низкую цену за паровой элемент, учитывая URL.

Вот код, который я до сих пор составлял. Тем не менее, кажется, что есть проблема с синтаксической ошибкой.

Пример URL-адреса:http://steamcommunity.com/market/listings/440/Genuine%20Ap-Sap

Я хочу получить самую низкую цену на странице, которая будет отображаться в ячейке. HTML-код страницы выглядит следующим образом. Я хочу получить самую низкую цену, в настоящее время она составляет 9,89. Я хочу, чтобы он показал рыночную цену с учетом комиссии.

 <span class="market_listing_price market_listing_price_with_fee">
                    S&#36;9.89              </span>
                <span class="market_listing_price market_listing_price_without_fee">
                    S&#36;8.60              </span>

Мой код VBA следует (есть некоторая ошибка синтаксиса)

Sub Retrieveprice() ' in the references section, enable 1) Microsoft Internet Controls, and 2) Microsoft HTML Object Library

Dim x As Long, y As Long Dim htmlText As Object

Set htmlText = CreateObject("htmlFile")

With CreateObject("msxml2.xmlhttp")
    .Open "GET", steamurl, False    ' save the URL in name manager as steamurl
    ' an example URL would be http://steamcommunity.com/market/listings/440/Genuine%20Ap-Sap
    .send
    htmlText.body.innerHTML = .responsetext End With

lStartPos = InStr(1, .responsetext, "<span class=CHR(34)market_listing_price market_listing_price_with_feeCHR(34)"> ") 
lEndPos = lStartPos + 12   'haven't counted the exact number yet, want to retrieve price
TextIWant = Mid$(.responsetext, lStartPos, lEndPos - lStartPos)   

Workbook.Worksheets.Add 
ActiveSheet.Range("A1").Value = TextIWant  

End Sub

В конце концов, если я смогу разобраться с этим, я хочу превратить его в функцию, чтобы у меня была ячейка с именем = Retrieveprice(URL), и она возвращала наименьшую цену элемента steam в URL.

Может кто-нибудь сказать мне, как исправить этот код и превратить его в функцию? Был бы очень признателен.

1 ответ1

0

Как правило, .responseText анализируется как документ HTML но он также может обрабатываться с помощью строковых функций. Тебе было удобно с Mid , Instr и т.д., Поэтому я остался на этом пути. Это не запускает новый рабочий лист; просто записывает в текущий, поэтому запустите новый пустой лист перед запуском макроса.

Sub Retrieveprice() ' in the references section, enable 1) Microsoft Internet Controls, and 2) Microsoft HTML Object Library

    Dim x As Long, y As Long, steamUrl As String, steamTxt As String, spanTxt As String, spanEndTxt As String

    steamUrl = "http://steamcommunity.com/market/listings/440/Genuine%20Ap-Sap"

    With CreateObject("msxml2.xmlhttp")
        .Open "GET", steamUrl, False
        .send
        steamTxt = .responsetext
    End With

    spanTxt = "<span class=""market_listing_price market_listing_price_with_fee"">"
    spanEndTxt = "</span>"
    x = InStr(1, steamTxt, spanTxt)
    With ActiveSheet
        Do While CBool(x)
            y = InStr(x, steamTxt, spanEndTxt)
            .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = _
              Application.Trim(Replace(Mid(steamTxt, x, (y - x) + Len(spanEndTxt)), Chr(10), vbNullString))
            x = InStr(y, steamTxt, spanTxt)
        Loop
    End With

End Sub

Вы можете ожидать результаты, подобные следующим.

           msxml2.xmlhttp GET

Это все, что я могу сказать о предоставленной вами информации, но это должно дать вам толчок в правильном направлении.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .