内部 Web ベースの Dataservice (cognos) からのデータの取得に問題があります。基本的に、 「blah.com/cognosapi.dll?product=xxx&date=yyy...」のようなGETリクエストをまとめてサーバーに送信し、HTMLとして保存して後でExcelフォームに解析できるWebページを受け取ります。
以前は非常にうまく機能していた VBA プログラムを作成しましたが、Web サービスが変更され、その間に「レポートが実行されています」というページが 1 秒から 30 秒表示されるようになりました。したがって、関数を呼び出すと、データの代わりにこの「レポートが実行されています」ページが常にダウンロードされます。「レポート実行中」ページの後に自動的に読み込まれるページをキャッチするにはどうすればよいですか?
これは、パラメーターとして GETstring とターゲット パスを持つ DownloadFile 関数です。
Public Function DownloadFile(sSourceUrl As String, _
sLocalFile As String) As Boolean
Dim HttpReq As Object
Set HttpReq = CreateObject("MSXML2.XMLHTTP")
Dim HtmlDoc As New MSHTML.HTMLDocument
HttpReq.Open "GET", sSourceUrl, False
HttpReq.send
If HttpReq.Status = 200 Then
HttpReq.getAllResponseHeaders
HtmlDoc.body.innerHTML = HttpReq.responseText
Debug.Print HtmlDoc.body.innerHTML
End If
'Download the file. BINDF_GETNEWESTVERSION forces
'the API to download from the specified source.
'Passing 0& as dwReserved causes the locally-cached
'copy to be downloaded, if available. If the API
'returns ERROR_SUCCESS (0), DownloadFile returns True.
DownloadFile = URLDownloadToFile(0&, _
sSourceUrl, _
sLocalFile, _
BINDF_GETNEWESTVERSION, _
0&) = ERROR_SUCCESS
End Function
ありがとうデビッド