数据未从HTML表更新到Excel
我有以下错误,数据在网页中更新,但不是在Excel中。我使用Application.OnTime刷新网页 下面是代码数据未从HTML表更新到Excel,html,excel,web-scraping,Html,Excel,Web Scraping,我有以下错误,数据在网页中更新,但不是在Excel中。我使用Application.OnTime刷新网页 下面是代码 Sub RefreshAction() Dim htm As Object Dim Tr As Object Dim Td As Object Dim Tab1 As Object Dim URL As String Dim Colstart As Long Dim HTML As Variant Dim i As Long Dim j As Long Dim n As Long
Sub RefreshAction()
Dim htm As Object
Dim Tr As Object
Dim Td As Object
Dim Tab1 As Object
Dim URL As String
Dim Colstart As Long
Dim HTML As Variant
Dim i As Long
Dim j As Long
Dim n As Long
Dim ss As Long
Application.ScreenUpdating = False
URL = "http://register.um.edu.my/kok_kosong_bi.asp"
Set HTML = CreateObject("htmlfile") 'Create HTMLFile Object
With CreateObject("msxml2.xmlhttp") 'Get the WebPage Content
.Open "GET", URL, False
.send
HTML.Body.Innerhtml = .responseText
End With
Colstart = 1
j = 1
i = Colstart
n = 0
'Loop Through website tables
For Each Tab1 In HTML.getElementsByTagName("table")
With HTML.getElementsByTagName("table")(n)
For Each Tr In .Rows
For Each Td In Tr.Cells
Sheet1.Cells(j, i) = Td.innerText
i = i + 1
Next Td
i = Colstart
j = j + 1
Next Tr
End With
n = n + 1
i = Colstart
j = j + 1
Next Tab1
Application.ScreenUpdating = True
Application.EnableEvents = True
Debug.Print Now() + TimeValue("00:00:05")
Application.OnTime Now() + TimeValue("00:00:05"), "RefreshAction", Schedule = True
End Sub
根据快照,该网站有7行,但excel仅捕获5行。我已经尝试了所有可能的方法,仍然找不到原因。我希望清除web缓存,但我找不到执行此操作的参考。网站上的数字更改。我第一次看的时候是6排,然后是5排,后来又是6排 您的代码很好,但是您需要
Schedule:=True
而不是Schedule=True
(打字?),并且您真的需要循环所有表吗?您还可以将HTML设置为对象
老实说,如果在结果上表现出这种不一致性,我认为该网站相当粗略
在任何给定时间获取所有行的一种简单方法是复制粘贴整个表,如下所示。您可以将其与刷新代码链接
Option Explicit
Public Sub GetTable()
Dim sResponse As String, html As New HTMLDocument, clipboard As Object
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "http://register.um.edu.my/kok_kosong_bi.asp", False
.send
sResponse = StrConv(.responseBody, vbUnicode)
End With
html.body.innerHTML = sResponse
With ThisWorkbook.Worksheets("Sheet1")
.Cells.ClearContents
.Cells.ClearFormats
Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
clipboard.SetText html.getElementsByTagName("table")(3).outerHTML
clipboard.PutInClipboard
.Cells(1, 1).PasteSpecial
End With
End Sub
网站上的数字有所变化。我第一次看的时候是6排,然后是5排,后来又是6排
您的代码很好,但是您需要Schedule:=True
而不是Schedule=True
(打字?),并且您真的需要循环所有表吗?您还可以将HTML设置为对象
老实说,如果在结果上表现出这种不一致性,我认为该网站相当粗略
在任何给定时间获取所有行的一种简单方法是复制粘贴整个表,如下所示。您可以将其与刷新代码链接
Option Explicit
Public Sub GetTable()
Dim sResponse As String, html As New HTMLDocument, clipboard As Object
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "http://register.um.edu.my/kok_kosong_bi.asp", False
.send
sResponse = StrConv(.responseBody, vbUnicode)
End With
html.body.innerHTML = sResponse
With ThisWorkbook.Worksheets("Sheet1")
.Cells.ClearContents
.Cells.ClearFormats
Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
clipboard.SetText html.getElementsByTagName("table")(3).outerHTML
clipboard.PutInClipboard
.Cells(1, 1).PasteSpecial
End With
End Sub
writextfile
是函数吗?它使用哪一个参考?我理解它的意思。比我的好多了:)哎呀。我把调试代码行留在那里了。这为我写出了响应html,以便直观地验证。您的代码很好,但您需要Schedule:=True而不是Schedule=True(输入错误?),并且您真的需要循环所有表吗?您也可以将HTML作为目标进行模糊处理,请考虑通过点击复选标记来接受旁边的答案。如果没有,请告诉我们缺少什么,我/其他人可以尝试解决它。WriteTxtFile
是函数吗?它使用哪一个参考?我理解它的意思。比我的好多了:)哎呀。我把调试代码行留在那里了。这为我写出了响应html,以便直观地验证。您的代码很好,但您需要Schedule:=True而不是Schedule=True(输入错误?),并且您真的需要循环所有表吗?您也可以将HTML作为目标进行模糊处理,请考虑通过点击复选标记来接受旁边的答案。如果没有,请告诉我们缺少什么,我/其他人可以尝试解决它。