Я собираюсь предложить простой тест, что в ячейке есть строка "http"
(используйте ее как основу для работы с URL).Я предпочитаю это тесту IsEmpty.Это должно смягчить попытки доступа к несуществующей странице во время вашего цикла.Кажется, ваша ошибка указывает на то, что кадр не находится во время цикла.Таким образом, возможности включают отсутствие URL-адреса в ячейке (из комментариев видно, что это возможно) или недопустимый URL-адрес / URL, не соответствующий ожидаемому шаблону.
Я имею дело с последними возможностями, используя OnОшибка Возобновить Следующее утверждение.Возможно, вы захотите выполнить отладку по конкретным ошибочным URL-адресам, если они присутствуют, чтобы проверить, не присутствует ли iframe, когда ожидается, и выявить какие-либо дополнительные уточнения.
В случае различного количества URL-адресов вы можете иметь фиксированный конеццикл, как вы в настоящее время, или динамически определить последнюю строку, например
Dim lastRow As Long
With ThisWorkbook.Worksheets("Sheet1")
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
Затем цикл из
For u = 2 To lastRow
Я все еще предпочитаю, чтобы тест Instr
"http"
былнастоящее время.
VBA:
Option Explicit
Public Sub GetInfo()
Dim IE As New InternetExplorer, u As Long
With IE
.Visible = True
For u = 2 To 100
If InStr(Cells(u, 1).Value, "http") > 0 Then
.navigate Cells(u, 1).Value
While .Busy Or .readyState < 4: DoEvents: Wend
On Error Resume Next
With .document.getElementById("bm_ann_detail_iframe").contentDocument
ThisWorkbook.Worksheets("Sheet1").Cells(u, 3) = .getElementsByClassName("formContentDataH")(3).innerText
ThisWorkbook.Worksheets("Sheet1").Cells(u, 4) = .getElementsByClassName("company_name")(0).innerText
ThisWorkbook.Worksheets("Sheet1").Cells(u, 5) = .getElementsByClassName("formContentDataH")(1).innerText
ThisWorkbook.Worksheets("Sheet1").Cells(u, 6) = .getElementsByClassName("formContentData")(3).innerText
ThisWorkbook.Worksheets("Sheet1").Cells(u, 7) = .getElementsByClassName("formContentData")(4).innerText
ThisWorkbook.Worksheets("Sheet1").Cells(u, 8) = .getElementsByClassName("formContentData")(5).innerText
ThisWorkbook.Worksheets("Sheet1").Cells(u, 9) = .getElementsByClassName("formContentData")(9).innerText
End With
On Error GoTo 0
End If
Next u
End With
End Sub