显示UserForm时Excel 2010 VBA代码被卡住

我创build了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发生变化时,进度指示器表单popup。 我也看到列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 

有什么想法吗?

如果您不是使用Excel Web Query结婚,而只是希望在数据加载时显示进度条,则可以尝试将URL作为单独的工作簿打开。 如果你这样做,Excel给你一个免费的进度条。

查看我对此问题的回答: 如何在查询完成后从Excel Web查询中后处理数据?

这种方法的权衡是你必须pipe理处理你自己拿回来的数据–Excel不会把它放在你给定的目的地。

在我们尝试了一些与您似乎一直在做的事情非常相似的事情之后,我们最终走上了这条路。