Excel VBA код, чтобы получить информацию из формы на удаленном веб-сайте в, а затем распечатать эту информацию на листе не работает? - PullRequest
1 голос
/ 11 января 2012

Ребята, можете ли вы прочитать это, пожалуйста, попробуйте мой код и посмотрите, работает ли он у вас?Он не вводит число на моем листе, но работает на кого-то другого.У меня есть код в обычном модуле (не модуль класса, не модуль листа и т. Д.) В VBA в Excel 2010.

Сначала он должен открыть IE и перейти на веб-страницу ниже.Затем код должен ввести число 2688 (или другое 4-значное число) в ячейку A20 активной рабочей таблицы.

Должен ли prodID быть затемнен как объект?И нужен ли объект явно вверху?или быть в другом типе модуля?Что-то не так с моими настройками?Или почему это не работает для меня?

Sub work_damit()
Dim ieApp As Object
Dim URL As String
Dim prodID As Object
    URL = "http://www.craft-e-corner.com/p-2688-new-testament-cricut-cartridge.aspx"
    Set ieApp = CreateObject("InternetExplorer.Application")
    With ieApp
        .Navigate URL
        .Visible = True

 Label1:
Application.Wait (Now() + TimeValue("0:00:10"))
On Error GoTo errorHandler:

        Set prodID = .document.getElementByID("ProductID")
        Range("A20").Value = prodID.Value
        .Quit
    End With

Exit Sub
errorHandler:
If Err.Number <> 462 Then
GoTo Label1:
End If
End Sub

Ответы [ 2 ]

1 голос
/ 11 января 2012

Вы полагаетесь на установленное время для загрузки веб-страницы, если она не загружалась в течение 10 секунд, код перенаправляется на обработчик ошибок.

Обновленный код

Эта версия использует xmlhttp для получения данных

   Public Sub SidsCode()
'http://www.experts-exchange.com/Software/Office_Productivity/Office_Suites/MS_Office/Excel/Q_26686033.html
    Dim objIE As Object
    Dim objxmlhttp As Object
    Dim strURL

    On Error GoTo errhandler
    strURL = "http://www.craft-e-corner.com/p-2688-new-testament-cricut-cartridge.aspx"
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Navigate "about:blank"

    Set objxmlhttp = CreateObject("Microsoft.xmlhttp")
    With objxmlhttp
        .Open "GET", strURL, False
        objxmlhttp.setRequestHeader "Content-Type", "text/xml"
        objxmlhttp.send
        If .Status = 200 Then
            objIE.document.write objxmlhttp.responseText
            ActiveSheet.Range("A20").Value = objIE.document.getElementByID("ProductID").Value
        Else
            MsgBox "no reponse from site"
        End If
    End With
    objIE.Quit
    Set objIE = Nothing
    Exit Sub

errhandler:
    MsgBox "Code failed on" & vbNewLine & Err.Description
    objIE.Quit
    Set objIE = Nothing
End Sub

Исходный код

Вместо этого вы можете кодировать состояние готовности страницы следующим образом:

    Sub work_damit()
    Dim ieApp As Object
    Dim URL As String
    Dim prodID As Object
    URL = "http://www.craft-e-corner.com/p-2688-new-testament-cricut-cartridge.aspx"
    Set ieApp = CreateObject("InternetExplorer.Application")
    With ieApp
        .Navigate URL
        Do While .readystate <> 4
        DoEvents
        Loop
        Set prodID = .document.getElementByID("ProductID")
        Range("A20").Value = prodID.Value
        .Quit
    End With
    Set ie = Nothing
End Sub
0 голосов
/ 11 января 2012

это прекрасно работает для меня.Я думаю, что ваш брат загружается с этим периодом времени?если нет, вы можете получить ошибку.

Вместо использования

Application.Wait (Now() + TimeValue("0:00:10"))

использование

Do  While ieApp.Busy
     DoEvents
Loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...