无法使用VBA(没有" ID"标记)将网页中的表格提取到Excel

时间:2016-12-23 18:48:33

标签: vba excel-vba excel

我正在尝试使用VBA将网页中的表格形式的数据传输到我的excel文件中,实际上我已成功打开并登录并导航到表区域但我无法复制表格日期在excel文件中!!原因是它没有" ID"或"名称"分配给它的标签,它只有" Class"属性 以下是网页

中表格的源代码
<table cellspacing="0" cellpadding="0" class="grid" style="width: 930px;">

另外,我无法使用网页查询,因为网页上有登录用户名和密码

使用在线参考我试过以下几个代码是我尝试过的相同!!!

Set IE = CreateObject("InternetExplorer.application")
IE.Visible = True
IE.navigate ThisWorkbook.Sheets("Sheet4").Range("Link")
Do Until Not IE.busy: DoEvents: Loop
Set doc = IE.document

Do While doc.ReadyState <> "complete": DoEvents: Loop
IE.document.all("new_username").Value = ThisWorkbook.Sheets("Sheet4").Range("User")
IE.document.all("new_password").Value = ThisWorkbook.Sheets("Sheet4").Range("Pass")
IE.document.all("ok").Click
Do While doc.ReadyState <> "complete": DoEvents: Loop
Set ElementCol = IE.document.getElementsByTagName("a")
For Each link In ElementCol
If link.innerHTML = "Gateway transactions" Then
link.Click
End If
Next
Application.Wait (Now + TimeValue("0:00:04"))
IE.document.getelementsbyname("new_store_id").Item(1).Value = ThisWorkbook.Sheets("Sheet4").Range("MID")
IE.document.getelementsbyname("new_tsrch_from_d").Item(0).Value = ThisWorkbook.Sheets("Sheet4").Range("Fromdate")
IE.document.getelementsbyname("new_tsrch_from_m").Item(0).Value = ThisWorkbook.Sheets("Sheet4").Range("Frommon")
IE.document.getelementsbyname("new_tsrch_from_y").Item(0).Value = ThisWorkbook.Sheets("Sheet4").Range("Fromyear")
IE.document.getelementsbyname("new_tsrch_to_d").Item(0).Value = ThisWorkbook.Sheets("Sheet4").Range("Todate")
IE.document.getelementsbyname("new_tsrch_to_m").Item(0).Value = ThisWorkbook.Sheets("Sheet4").Range("Tomon")
IE.document.getelementsbyname("new_tsrch_to_y").Item(0).Value = ThisWorkbook.Sheets("Sheet4").Range("ToYear")
IE.document.getelementsbyname("new_tsrch_type").Item(0).Value = "15"
Application.Wait (Now + TimeValue("0:00:02"))
Set tags = IE.document.getElementsByTagName("input")
For Each tagx In tags
If tagx.Name = "ok" Then
tagx.Click
Exit For
End If
Next
Set doc = IE.document 'From here the code starts for extracting table
Set tbl = doc.getelementsbyclassname("grid")
   GetTableData tbl, Sheet1.Range("A1")
End Sub
Sub GetTableData(ByRef tbl, rng As Range)
Dim cl As Object
Dim rw As Object
Dim I As Long
For Each rw In tbl.Rows ' In this line i am getting an error message "Run tine Error 438"Object Doesn't Support This Property or Method"
    For Each cl In rw.Cells
        rng.Value = cl.outerText
        Set rng = rng.Offset(, 1)
    Next cl
    Set rng = rng.Parent.Cells(rng.Row + 1, 1)
Next rw
rng.Parent.Cells.WrapText = False
End SuB

我希望有人可以帮助我!!!在此先感谢!!!

2 个答案:

答案 0 :(得分:0)

嗨,经过深入的研究,我找到了答案,教导发布,以便有人受益!!实际上真的感谢“user2216436”和“Jonny”,因为他们给了我以下链接中的代码How to read the nested table <td> values using VBA?我刚编辑以满足我的需求..我真的很喜欢这个网页!像我这样的初学者真棒!!!!

答案 1 :(得分:0)

您还可以尝试将表格HTML复制粘贴到工作表:

Dim clipboard As Object
Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
clipboard.SetText doc.querySelector("table[class=grid]").outerHTML
clipboard.PutInClipboard
ThisWorkbook.Worksheets("Sheet1").Cells(1, 1).PasteSpecial