/ / O código VBA do Excel 2010 fica preso quando o UserForm é exibido - excel, excel-vba, vba

O código do VBA do Excel 2010 fica preso quando o UserForm é exibido - excel, excel-vba, vba

Eu criei um UserForm como um indicador de progressoenquanto uma consulta à web (usando o objeto InternetExplorer) é executada em segundo plano. O código é acionado conforme mostrado abaixo. O formulário do indicador de progresso é chamado "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

O que eu vejo com esse código é que o progressoformulário indicador aparece quando a célula B2 muda. Eu também vejo que o intervalo de células na coluna A é limpo, o que me diz que o vbModeless está fazendo o que eu quero. Mas então, em algum lugar dentro do procedimento GetWebData (), as coisas são desligadas. Assim que eu destruo manualmente o formulário de indicador de progresso, a rotina GetWebData () é concluída e vejo os resultados corretos. Mas se eu deixar o indicador de progresso visível, as coisas simplesmente ficarão presas indefinidamente.

O código abaixo mostra o que o GetWebData () está fazendo.

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

Alguma ideia?

Respostas:

0 para resposta № 1

Se você não é casado com o uso do Excel Web Query,e você só quer que uma barra de progresso apareça enquanto seus dados são carregados, você pode tentar abrir a URL como uma pasta de trabalho separada. Se você fizer isso, o Excel dá-lhe uma barra de progresso de graça.

Veja a minha resposta sobre esta questão: Como posso pós-processar os dados de uma consulta da Web do Excel quando a consulta é concluída?

A desvantagem dessa abordagem é que você tem que gerenciar o processamento dos dados que recebe de volta - o Excel não o colocará em um determinado destino para você.

Nós acabamos seguindo esse caminho depois que tentamos algo bem parecido com o que você parece estar fazendo.