Excel 2010 VBA-код застревает при отображении UserForm

Я создал UserForm в качестве индикатора прогресса, в то время как веб-запрос (с использованием объекта InternetExplorer) работает в фоновом режиме. Код запускается, как показано ниже. Форма индикатора прогресса называется "Прогеры".

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

Любые мысли?

+1
источник поделиться
1 ответ

Если вы не состоите в браке с использованием Excel Web Query, и вы просто хотите, чтобы индикатор выполнения отображался во время загрузки данных, вы можете попробовать вместо этого открыть URL-адрес в качестве отдельной рабочей книги. Если вы это сделаете, Excel предоставит вам индикатор прогресса.

См. мой ответ на этот вопрос: Как я могу отправить данные из веб-запроса Excel после завершения запроса?

Компромисс между этим подходом заключается в том, что вам нужно управлять обработкой данных, которые вы возвращаете сами, - Excel не будет помещать их в данный пункт назначения для вас.

Мы закончили этот маршрут после того, как попробовали что-то очень похожее на то, что вы, похоже, делали.

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос