Почему мой код для очистки текста с использованием VBA работает только в режиме отладки - PullRequest
1 голос
/ 25 мая 2019

Я написал код для очистки конкретных дат с сайта патента Google.Изучив множество примеров, я понял, что getElementsByClassName получает нужную мне дату.Код ниже работает, когда я перехожу в режиме отладки и генерирует нужный MsgBox.Но когда я запускаю его, он выдает мне сообщение «Ошибка времени выполнения 91»: переменная объекта или переменная блока не установлена ​​».

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

Буду признателен за любую помощь.

Sub Get_Date()
Dim ie As InternetExplorer
Dim sURL As String
Dim strGrant As Variant

    Set ie = New InternetExplorer
sURL = "https://patents.google.com/patent/US6816842B1/en?oq=6816842"

ie.navigate sURL
ie.Visible = False

Do While ie.Busy Or ie.ReadyState < 4
    DoEvents
Loop

strGrant = ie.document.getElementsByClassName("granted style-scope application-timeline")(0).innerText

Do While ie.Busy Or ie.ReadyState < 4
    DoEvents
Loop

MsgBox strGrant

ie.Quit

End Sub
    ````

1 Ответ

2 голосов
/ 25 мая 2019

Это, вероятно, проблема с синхронизацией согласно моему комментарию.Об этом говорится в других ответах на подобные вопросы.Основные моменты, которые следует учитывать:

  1. Используйте правильные ожидания загрузки страницы: While IE.Busy Or ie.readyState < 4: DoEvents: Wend
  2. Возможно синхронизированный цикл , чтобы попытаться установить элемент в переменную затемтестирование, если установлено.

В качестве альтернативы, немного глупо, но кажется, что все предоставленные даты совпадают с датами публикации (дата публикации патента).Если это так, то вы можете использовать xhr для получения даты публикации

Option Explicit   
Public Sub GetDates()
    Dim html As HTMLDocument, i As Long, patents()
    patents = Array("US7724240", "US6876312", "US8259073", "US7523862", "US6816842B1")
    Set html = New HTMLDocument

    With CreateObject("MSXML2.XMLHTTP")
        For i = LBound(patents) To UBound(patents)
            .Open "GET", "https://patents.google.com/patent/" & patents(i) & "/en?oq=" & patents(i), False
            .setRequestHeader "User-Agent", "Mozilla/5.0"
            .send
            html.body.innerHTML = .responseText
            If html.querySelectorAll("[itemprop=publicationDate]").length > 0 Then
                Debug.Print html.querySelector("[itemprop=publicationDate]").DateTime
            End If
        Next
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...