数据未从HTML表更新到Excel

数据未从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

我有以下错误,数据在网页中更新,但不是在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
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作为目标进行模糊处理,请考虑通过点击复选标记来接受旁边的答案。如果没有,请告诉我们缺少什么,我/其他人可以尝试解决它。