2

内部 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

ありがとうデビッド

4

2 に答える 2