Я делаю функцию 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
не будет пропущен.