VBAで-1072896658というエラーが出て困ったのでメモ

公開日: 


エラーは突然?

httpリクエストを実装しているVBAで、

ある日突然htmlを取得しようとするとエラーとなり、

困ったのでメモ。

原因

responseText はダメということが、デバッグで止まっているので、

タブーな取得方法のようです。

    Set XmlHttp = CreateObject("MSXML2.XMLHTTP")
    
    With XmlHttp
        .Open "POST", Url, False
        .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .Send Param
        resTxt = .ResponseText
        resStatus = .Status
    End With

対処方法

ほとんどの場合は responseText を responseBody に変えることで解決するようですが、

文字コードがサーバーサイドで依存している場合は文字化けするので、

対応する必要があるようです。(エクセルではSJISです)

    Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
    objXMLHTTP.Open "POST", Url, False
    objXMLHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    objXMLHTTP.Send Param
    strResult = objXMLHTTP.responseBody
    resStatus = objXMLHTTP.Status
    
    ' 文字コード変換された文字列を抽出
    Set stm = CreateObject("ADODB.Stream")
    stm.Type = 1   'バイナリモード
    stm.Open
    stm.Write strResult  'バイナリを書き込み
    stm.Position = 0  '先頭に戻してから
    stm.Type = 2   'テキストモードに変更
    stm.Charset = "UTF-8"   '取得したい文字コードをセット
    strResult = stm.ReadText
    stm.Close