您好我使用以下代码将一些数据从网站解析为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
答案 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...
,这样只有当您在该表单上时才会运行...