Aceess VBA - подпрограмма получения данных с веб-сайта работает в режиме отладки, но не во время выполнения - PullRequest
0 голосов
/ 30 декабря 2018

Я хотел бы получить данные клиента из номера НДС (номер NIP в Польше).Я не могу понять, почему код, указанный ниже, работает только в режиме отладки и при нажатии F5, но я установил точку останова в строке с помощью «button.click».Когда я запускаю его без перерыва, он не печатает никаких данных.

Заранее благодарю за любой совет, как с этим справиться.

Метод сна, используемый в процедуре ниже, выглядит следующим образом:

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

Private Sub IE_GetDataFromSite()

    Dim IE As SHDocVw.InternetExplorer
    Dim HTMLDoc As MSHTML.HTMLDocument
    Dim HTMLInput As MSHTML.IHTMLElement
    Dim button As MSHTML.IHTMLElement
    Dim row As MSHTML.IHTMLElement
    Dim rows As MSHTML.IHTMLElementCollection
    Dim cell As MSHTML.IHTMLElement

    Set IE = New SHDocVw.InternetExplorer


        IE.Visible = False
        IE.navigate "https://wyszukiwarkaregon.stat.gov.pl/appBIR/index.aspx"

        Do While IE.ReadyState <> READYSTATE_COMPLETE
            DoEvents
        Loop

        Set HTMLDoc = IE.Document
        Set HTMLInput = HTMLDoc.getElementById("txtNip")
            HTMLInput.value = "9542583988"

        Set button = HTMLDoc.getElementById("btnSzukaj")
        button.Click

        Do While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE
            DoEvents
        Loop

        Sleep (1000)

        Set HTMLDoc = IE.Document

        Set rows = HTMLDoc.getElementsByClassName("tabelaZbiorczaAltRow")
                    For Each row In rows
                        Debug.Print row.innerText, row.className
                        If row.className = "tabelaZbiorczaAltRow" Then
                            For Each cell In row.Children

                                Debug.Print cell.innerText

                            Next cell
                        End If
                    Next row
        IE.Quit
End Sub

1 Ответ

0 голосов
/ 30 декабря 2018

Разрешить короткую паузу после ввода номера, а также цикл до появления таблицы

Option Explicit

Public Sub GetInfo()
    Dim ie As New InternetExplorer, td As Object
    Dim tr As Object, table As Object, t As Date
    Const MAX_WAIT_SEC As Long = 5

    With ie
        .Visible = True
        .navigate "https://wyszukiwarkaregon.stat.gov.pl/appBIR/index.aspx"

        While .Busy Or .readyState < 4: DoEvents: Wend

        .document.querySelector("#txtNip").Value = "9542583988"

        Application.Wait Now + TimeSerial(0, 0, 1)

        .document.querySelector("#btnSzukaj").Click

        While .Busy Or .readyState < 4: DoEvents: Wend
        t = Timer
        Do
            DoEvents
            On Error Resume Next
            Set table = .document.querySelector("table.tabelaZbiorcza")
            On Error GoTo 0
            If Timer - t > MAX_WAIT_SEC Then Exit Do
        Loop While table Is Nothing
        If Not table Is Nothing Then
            For Each tr In table.getElementsByTagName("tr")
                For Each td In tr.getElementsByTagName("td")
                    Debug.Print td.innerText
                Next
            Next
        End If
        .Quit
    End With
End Sub
...