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
何かご意見は?