1

我创建了一个用户窗体作为进度指示器,而 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

有什么想法吗?

4

1 回答 1

0

如果您不习惯使用 Excel Web Query,并且只希望在加载数据时显示进度条,则可以尝试将 URL 作为单独的工作簿打开。如果您这样做,Excel 会免费为您提供一个进度条。

请参阅我对这个问题的回答:查询完成后,如何对 Excel Web 查询中的数据进行后处理?

这种方法的权衡是您必须自己管理处理您取回的数据 - Excel 不会为您将其放入给定的目的地。

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

于 2015-10-06T16:12:37.350 回答