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

Excel 如何从网站触发/更新刷新数据,excel,ms-access,vba,Excel,Ms Access,Vba,您好,我正在使用以下代码将一些数据从网站解析到excel,我需要创建一个例程以更新/刷新数据,并保持最新,我被建议开始新主题,是一个包含多张工作表的大列表,因此每次excel计算都需要花费很长时间,我希望有人能帮助我 Public Function giveMeValue(ByVal link As Variant) As Variant Set htm = CreateObject("htmlFile") With CreateObject("msxml2.xmlhttp") .O

您好,我正在使用以下代码将一些数据从网站解析到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
Dim color As Integer'起始颜色范围
表(1)中每个单元格的范围(“M4:M5000”)
如果是空的(单元格),则转到下一个单元格:
如果不是数字(cell.Value),则转到下一个单元格:
如果单元格值>14,则
颜色=4
ElseIf单元格。值<8,则颜色=3
其他:颜色=6
如果结束
cell.Interior.ColorIndex=颜色
nextcell:
下一个细胞
端接头
因此,由于我对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
子刷新()
暗淡的等待
等待=计时器
当定时器<等待+10时
“什么也不做”
ActiveWorkbook.RefreshAll
温德
MsgBox“更新已成功完成!”
'末端接头

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

首先,您可以使用条件格式吗?将比循环通过每个单元并改变颜色快得多

其次,将GiveMeValue函数设为“volatile”(),以便每次重新计算页面时,它都会刷新,即在函数中的任何其他内容之前添加一行“application.volatile”(true)

第三:在“工作表\计算”事件中运行刷新代码,并将其更改为:

Sub Refresh()
    Dim WAIT As Double
    WAIT = Timer
    While Timer < WAIT + 10
        DoEvents 'do nothing'
    Wend
    wsSheet.Calculate
End Sub
子刷新()
暗淡的等待
等待=计时器
当定时器<等待+10时
“什么也不做”
温德
wsSheet.计算
端接头
所以它运行…等待一点…计算,然后该计算触发另一个等待…等等…现在您的函数是可变的,它应该刷新当前工作表上的所有“getvalue”公式

我猜第四步是在工作表的激活事件中添加一个“wsSheet.calculate”来触发这个无休止循环的开始


话虽如此,也许这种无休止的循环将导致巨大的问题,如超级计算机速度减慢、无法使用计算机以及普遍的厄运……只有一种方法可以找到答案!doevents的事情在理论上应该会使一切正常。如果activesheet.codename=“wsSheet”,可能会添加
“然后…
所以它只有在您在该工作表上时才运行…

嗨,Simon谢谢您的建议,我无法使用格式化条件,因为返回值不是文本,而是字符串,所以我必须包含一些额外的代码来调节值。Volatile函数我试图在一开始就包含它,但正如您所想的那样,它会导致pc出现问题,导致所有内存过载,并导致其他程序出现问题。我尝试再次添加它,如果您能提供关于“if activesheet.codename=“wsSheet”then…”的更详细的建议,我将不胜感激。正如我在帖子中提到的,我不擅长VBA,ths可以解决我的问题THX'wsSheet.Calculate'返回错误对象未定义,因此在VBA中单击“查看项目资源管理器”和“查看属性窗口”。。。您将看到“Microsoft Excel对象”下列出的工作表对象,如“Sheet1(Sheet1)”、“Sheet2(Sheet2)”等。。。第一位是代码名,第二位是Excel名称或选项卡名称。。。单击您的工作表并查看“属性”框:它有一个名为“(名称)”的字段。。。在这里,你可以将代码名更改为你喜欢的任何东西。。。然后你可以在你的代码中引用它。。。i、 e.如果您将其更改为“wsHorse”,那么您的代码可以使用“ThisWorkbook.wsHorse”…PS在您的条件格式中,使用公式“=值(A1)>5”等。。。这会让你比较单元格,就好像它是一个数字而不是文本PPS。你在表格上有多少个givemevalue公式的实例?我在每张表格上有大约200/250个实例