Ошибка выполнения 91 при вытягивании Google Translate Output - PullRequest
0 голосов
/ 23 февраля 2020

Я делаю функцию VBA, которая будет переводить текст на другой язык, извлекая переведенный текст из Google Translate с помощью "getelementsByClassName". Я вытаскиваю правильную информацию, и, кроме появления ошибки, код работает. Тем не менее, я сталкиваюсь с

ошибка времени выполнения 91 - Obj var или с блоком var не установлены

, как только код достигает x = element.Item(0).innerText в коде ниже. Как только я нажимаю отладку и продолжаю сценарий, код работает точно так, как я ожидаю, и назначает правильный перевод в виде строки для временной переменной, которую я использовал, x.

Кто-нибудь знает, почему эта ошибка всплывающее окно и почему это не имеет значения, когда я продолжаю сценарий? Если есть другая версия application.DisplayAlerts, которую я могу обвести вокруг этой строки, чтобы ошибка не появлялась, этого было бы достаточно.

Я только что использовал веб-страницу google translate для перевода "Hello World" для испанского sh для простоты здесь.

Public Sub Translate()

Dim page As String
page = "https://translate.google.com/#view=home&op=translate&sl=en&tl=es&text=Hello%20world"

Dim IE As New InternetExplorer
IE.navigate page

'Wait til webpage is fully loaded
Do While IE.readyState <> READYSTATE_COMPLETE
    Application.StatusBar = "Loading translation..."
    DoEvents
Loop

Dim element As IHTMLElementCollection
Set element = IE.document.getElementsByClassName("result-shield-container tlid-copy-target")

Dim x As String
x = element.Item(0).innerText
MsgBox x

End Sub

ОБНОВЛЕНИЕ

В результате возникла проблема с синхронизацией, когда getElementsByClassName запускался до полной загрузки IE. Попытался добавить Or IE.Busy и каждую комбинацию .Busy и .readyState, о которой я мог подумать, все еще сталкиваясь с проблемой. Использование подпрограммы Sleep работало некоторое время, однако последующие итерации приводили к одной и той же ошибке. Найден метод работы из одной статьи, в котором используется следующий метод, который использует первый while, чтобы гарантировать, что следующий until не будет пропущен.

...