Тот факт, что вы задали переменную с помощью этой строки:
Set var1 = html.getElementById("resultStats")
не обязательно означает, что var1
на самом деле не Nothing
.
На самом деле это зависит от вашей ссылки.
В своем цикле вы создаете ссылку на ваш запрос следующим образом:
url = "https://www.google.com/search?q=" & Cells(i, 1) & "&source=lnt&tbs=cdr%3A1%2Ccd_min%3A" & Cells(i, 5) & "%2Ccd_max%3A" & Cells(i, 6) & "&tbm=nws"
... и использовать его в запросе XMLHTTP:
XMLHTTP.Open "GET", url, False
XMLHTTP.send
... который может или не может вернуть желаемый результат.
В случае, если вы получаете ошибку, скорее всего, у вас есть:
Set var1 = html.getElementById("resultStats")
>>> var1 = Nothing
... и так, при попытке запустить следующую строку:
Cells(i, 7).Value = var1.innerText
... вы получаете NullReferenceException
, потому что вы пытаетесь взять .innerText
из Nothing
.
Чтобы предотвратить этот тип проблемы, вы должны проверить вашу переменную на нулевое значение и только затем делать то, что вы должны делать:
Set var1 = html.getElementById("resultStats")
If Not var1 Is Nothing Then
Cells(i, 7).Value = var1.innerText
'... and whatever else you want to do with var1
End If
Примечание: в более общем смысле, это то, что вы всегда должны делать в своем коде, когда есть риск для недействительности.
Например:
Set var1 = Range("A1")
. Здесь нет риска, на листе всегда будет Range("A1")
, поэтому var1
не может быть Nothing
.
Set var1 = Range("A1:A100").Find("something that doesn't exist")
. В этом случае может быть риск того, что Find
вернет Nothing
, если искомого значения не существует. Следовательно, вы всегда должны проверять var1
на ничтожность, чтобы избежать ссылки на что-либо на объекте Nothing
.
Когда вы работаете с XMLHTTP
запросами, вы потенциально никогда не узнаете , является ли объект, возвращаемый из запроса, чем-то или является Nothing
. Следовательно, всегда проверяет ваш код на ничтожность, прежде чем делать то, что вы хотите сделать с этими объектами .