以下代码在结果上运行良好,并且我已经获得了所需的值。但是在运行过程结束时,它在“带有.document.getElementById(“ bm_ann_detail_iframe”)。contentDocument“行上显示“运行时错误'424'对象必需”。
用于从以下位置提取数据的示例URL链接: http://www.bursamalaysia.com/market/listed-companies/company-announcements/5927925
http://www.bursamalaysia.com/market/listed-companies/company-announcements/5927809
http://www.bursamalaysia.com/market/listed-companies/company-announcements/5927509
Public Sub GetInfo()
Dim IE As New InternetExplorer, clipboard As Object
With IE
.Visible = False
For u = 2 To 100
.navigate Cells(u, 1).Value
While .Busy Or .readyState < 4: DoEvents: Wend
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
Next u
End With
End Sub
答案 0 :(得分:1)
我将建议一个简单的测试,即在单元格中有一个"http"
字符串(以此为基础来使用URL)。我更喜欢IsEmpty测试。这是为了减轻在循环期间访问不存在的页面的尝试。您的错误似乎表明循环期间未找到框架。因此,可能性包括单元格中没有URL(从注释看来,这是一种可能性)或无效的URL /一个不符合预期模式的URL。
我通过使用On Error Resume Next语句处理后一种情况。您可能希望对特定的失败URL进行调试(如果存在),以检查是否在预期的情况下不存在iframe的情况,并确定是否需要进一步完善。
对于不同数量的网址,您可以像目前一样使用固定的结束循环,也可以动态确定最后一行,例如
Dim lastRow As Long
With ThisWorkbook.Worksheets("Sheet1")
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
然后从
循环For u = 2 To lastRow
我仍然更喜欢Instr
的{{1}}测试。
VBA:
"http"