我创建了一个UserForm作为进度指示器,而Web查询(使用InternetExplorer对象)在后台运行。代码被触发,如下所示。进度指示器表单称为“Progerss”。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = Range("B2").Row And Target.Column = Range("B2").Column Then
Progress.Show vbModeless
Range("A4:A65535").ClearContents
GetWebData (Range("B2").Value)
Progress.Hide
End If
End Sub
我在这段代码中看到的是,当单元格B2发生变化时,会弹出进度指示器表单。我还看到A列中的单元格范围被清除,这告诉我vbModeless正在做我想要的。但是,在GetWebData()过程中的某个地方,事情就会被挂起。一旦我手动销毁进度指示器表单,GetWebData()例程就会完成,我会看到正确的结果。但如果我让进度指示器可见,那么事情就会无限期地停滞不前。
下面的代码显示了GetWebData()正在做什么。
Private Sub GetWebData(ByVal Symbol As String)
Dim IE As New InternetExplorer
'IE.Visible = True
IE.navigate MyURL
Do
DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE
Dim Doc As HTMLDocument
Set Doc = IE.document
Dim Rows As IHTMLElementCollection
Set Rows = Doc.getElementsByClassName("financialTable").Item(0).all.tags("tr")
Dim r As Long
r = 0
For Each Row In Rows
Sheet1.Range("A4").Offset(r, 0).Value = Row.Children.Item(0).innerText
r = r + 1
Next
End Sub
有什么想法吗?
答案 0 :(得分:0)
如果您未与使用Excel Web Query结婚,并且只想在加载数据时显示进度条,则可以尝试将URL作为单独的工作簿打开。如果您这样做,Excel会免费为您提供进度条。
请参阅我对此问题的回答:How can I post-process the data from an Excel web query when the query is complete?
这种方法的权衡是你必须管理自己收到的数据 - Excel不会把它放在给定的目的地。
在我们尝试了与你似乎一直非常相似的事情后,我们最终走上了这条路线。