如何从网站触发/更新刷新数据

时间:2015-02-25 02:00:45

标签: vba excel-vba access-vba excel

您好我使用以下代码将一些数据从网站解析为excel,我需要创建一个例程来更新/刷新数据并保持最新状态我建议开始新主题,很大列表有多张表,所以每次excel必须计算很长时间,我希望有人可以帮助我

 Public Function giveMeValue(ByVal link As Variant) As Variant

Set htm = CreateObject("htmlFile")

With CreateObject("msxml2.xmlhttp")
   .Open "GET", link, False
   .send
   htm.body.innerhtml = .responsetext
End With

If Not htm.getelementbyId("JS_topStoreCount") Is Nothing Then

   giveMeValue = htm.getelementbyId("JS_topStoreCount").innerText

Else
    giveMeValue = "0"

End If

htm.Close
Set htm = Nothing

End Function

要检索我使用=GiveMeValue(A1)的值并且条件格式化返回的值我使用以下代码:

Dim color As Integer 'Start Color range

  For Each cell In Sheets(1).Range("M4:M5000")

    If IsEmpty(cell) Then GoTo nextcell:
    If Not IsNumeric(cell.Value) Then GoTo nextcell:

    If cell.Value > 14 Then
      color = 4
    ElseIf cell.Value < 8 Then color = 3
    Else: color = 6
    End If
    cell.Interior.ColorIndex = color
nextcell:
  Next cell

End Sub

因为我对VBA一无所知我可能不合适使用以下代码尝试刷新它但没有结果:

Sub Refresh()
Dim WAIT As Double
WAIT = Timer
While Timer < WAIT + 10
DoEvents 'do nothing'
ActiveWorkbook.RefreshAll
Wend
MsgBox "Update Finished Successfully !"

'End Sub

1 个答案:

答案 0 :(得分:0)

听起来雄心勃勃。我喜欢! :)

首先,您可以使用条件格式吗?比循环遍历每个细胞和改变颜色要快得多。

其次,让你的GiveMeValue功能&#34;不稳定&#34; (http://www.excel-easy.com/vba/examples/volatile-functions.html)以便每次重新计算页面时刷新,即在函数中的任何其他内容之前添加一行&#34; application.volatile(true)。

第三步:在&#34; worksheet_calculate&#34;中运行刷新代码。事件并将其更改为:

Sub Refresh()
    Dim WAIT As Double
    WAIT = Timer
    While Timer < WAIT + 10
        DoEvents 'do nothing'
    Wend
    wsSheet.Calculate
End Sub

所以它运行...稍等......计算,然后该计算触发另一个等待...等等......现在你的函数是易失性的,它应该刷新所有的&#34; getvalue&#34;你当前表上的公式......

我猜我刚刚提出了一个&#34; wsSheet.calculate&#34;在worksheet_activate事件中触发无限循环的开始...

说了这么多,也许无限循环会导致巨大的问题,即大型计算机速度慢,无法使用计算机,以及一般的厄运......只有一种方法可以找到答案!从理论上讲,事情应该让一切都好。也许可以添加if activesheet.codename = "wsSheet" then...,这样只有当您在该表单上时才会运行...