【问题标题】:Making VBA scraped Data update automatically使 VBA 抓取的数据自动更新
【发布时间】:2018-03-06 15:40:59
【问题描述】:

我成功编写了 VBA 从网页中抓取数据。

由于数据定期更新,我希望它也能在我的 Excel 文档中更新。

我得到的数据是列出的所有博彩公司的不同赔率。

我尝试了变量 HTMLRow 的 .refreshperiod .refresh 函数,但由于某种原因不起作用

Sub Scrape()
    For x = 1 To 5
        Worksheets("links").Select
        Worksheets("links").Activate
        mystr = "https://easyodds.com/tennis/challenger/santiago-chile/928271/match-result"
        mystr = Cells(x, 1)

        Dim XMLPage As New MSXML2.XMLHTTP60
        Dim HTMLDoc As New MSHTML.HTMLDocument
        Dim HTMLOdds As MSHTML.IHTMLElement
        Dim HTMLRow As Object
        Dim HTMLCell As MSHTML.IHTMLElement

        Dim RowNum As Long, ColNum As Integer
        XMLPage.Open "GET", mystr, False
        XMLPage.send

        Dim XMLResp As MSHTML.IHTMLElement
        HTMLDoc.body.innerHTML = XMLPage.responseText
        Set HTMLOdds = HTMLDoc.getElementById("betsTable")
        Worksheets.Add
        Cells.Select
        Selection.NumberFormat = "0.00"
        Range("A1").Value = mystr
        RowNum = 
        Set HTMLRow = HTMLOdds.getElementsByTagName("tbody")
        For Each HTMLRow In HTMLOdds.getElementsByTagName("tr")
            ColNum = 1
            For Each HTMLCell In HTMLRow.getElementsByTagName("Div")
                Cells(RowNum, ColNum) = HTMLCell.innerText
                ColNum = ColNum + 1
            Next HTMLCell
            RowNum = RowNum + 1
        Next HTMLRow
    Next x
End Sub

【问题讨论】:

  • 所以你是说这段代码自己运行正常,你只需要让它自动运行?
  • 是的,代码至少现在可以正常运行,所以我只需要让我已经抓取的数据每分钟或每几秒更新一次。
  • 如果您经常这样做,该网站可能会让您失望。无论如何,这个问题根本不是关于抓取,而是关于如何按时间间隔运行代码,我建议搜索Stack Overflow(或其他地方)。

标签: excel ms-access vba excel-web-query


【解决方案1】:

您可以尝试使用Application.OnTime Now + TimeValue("01:00:00"), "YourMethodName" 调用您的方法。此示例将每小时调用一次该方法,但您必须保持文件打开。

【讨论】:

  • “mymethod”到底是什么意思。对不起,我对编码很陌生 xD
  • 所以你创建了一个名为Scrape() 的Sub,我称之为你的“方法”的名称。如果这个术语在 VBA 上下文中常用,那么我不会进一步讨论。只需尝试将"YourMethodName" 替换为"Scrape"。这将使您的整个名为 Scrape() 的 Sub 在您指定的时间再次运行。
【解决方案2】:

在 Module2 中更新以下代码:

Sub Workbook_Open()
Call Module1.Scrape
End Sub

当您打开工作文件时会触发此代码。 在你的主程序的第一行更新下面的代码

Sub Scrape()
Application.OnTime Now + TimeValue("0:01"), "Scrape" 

它会每分钟自动执行一次代码,在这里您可以根据需要更改时间间隔。即使您关闭了工作表,这也会在无限循环中执行。

谢谢。

【讨论】:

    猜你喜欢
    • 2020-03-19
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 2020-10-14
    相关资源
    最近更新 更多