Access

ACCESS VBAからWebAPIをコールする

記事内に商品プロモーションを含む場合があります

AccessのVBAからWebAPIをコールする方法です。

私はインセンティブ配信用のURLをAPI関数を使って取得するために利用しました。

会社でプレゼント企画を実施するならeギフト(デジタルギフト)がおすすめ!会社でプレゼント企画を開催するなら、eギフト(デジタルギフト)がおすすめです。思ったより手軽に発注、納品いただけますのでお客様へのインセンティブに最適です。配信会社を選定する際のポイントをご紹介しています。...

VBAからWebAPI関数をコールするための準備

HTTP通信を使うためには、「Microsoft XMLライブラリ」が必要です。

まずは、参照設定を追加しましょう。

VBAからAPIをコールする関数

準備が出来たらAPIコールの関数を作ります。

サンプルプログラムをコピーしてご利用ください。(引数も戻りもJSON形式のサンプルです)

※自己責任でお願いします(;^_^A

 

このサンプルでは、引数は以下の通りです。

  • Request:”POST” または “GET”
  • url:APIのURL
  • accesstaken:認証トークン
  • param:Json形式の文字列

.Open request, ulr, False

Openメソッドの第3引数は同期タイプです。

True=非同期、False=同期です。

同期の場合、通信が終了するまでそれ以降の処理が実行されません。

通信の結果を待って以降の処理を実行したい場合はFalseを指定します。

第3引数を指定しなかった場合、デフォルトは非同期となります。

' *==============================================================
' * WebAPIをキックする
' *
' * @param request POST/GET
' * @param url
' * @param accesstken(Encodeが必要であればEncode済みの文字列)
' * @param param(jsonオブジェクト)
' * @return responseテキストデータ
' *==============================================================
Public Function KickWebApiOfJson(ByVal request As String, ByVal url As String, Optional ByVal accesstaken As String, Optional ByVal param As String) As String

    On Error GoTo Err_Exit
    
    With CreateObject("MSXML2.XMLHTTP")
        .Open request, url, False
        
        'Basic認証
        .setRequestHeader "Authorization", accesstaken
        .setRequestHeader "Content-Type", "application/json; charset=UTF-8"
        .send param
        
        Do While .readyState < 4
            DoEvents
        Loop

        'デバッグは↓をアンコメントしてレスポンスを確認
        Debug.Print .responseText
        
        '.responseTextを戻り値とする
        KickWebApiOfJson = .responseText
        
    End With
    
    Exit Function
    
    
Err_Exit:
    MsgBox Err.Number & ":" & Err.Description, vbOKOnly + vbCritical
   
    
End Function

 

.responseTextにAPIコールの結果値が戻ります。

本サンプルでは戻り値もJSON形式であるという想定です。

戻ったJSON文字列から必要な情報を取り出す必要があるため、その作業はまた別記事でUPします。

アクセストークンをエンコードする必要がある場合

WebAPI関数の仕様でアクセストークンをエンコードする必要がある場合は以下の関数を使ってトークンをエンコードしてから”Authorization”に渡しましょう!

' *==============================================================
' * テキストをBase64でエンコードします
' *
' * @param text 変換する値
' * @return Base64フォーマットデータ
' *==============================================================
Public Function EncodeToBase64(ByRef text As String) As String
 
    ' オブジェクトの準備
    Dim node As Object
    Set node = CreateObject("Msxml2.DOMDocument.3.0").createElement("base64")
 
    ' エンコード
    node.DataType = "bin.base64"
    node.nodeTypedValue = ConvertToBinary(text)
 
    ' 関数で取り除けない改行を削除して返却
    EncodeToBase64 = Replace(node.text, vbLf, "")
End Function

 

AccessVBAでJSONフォーマットのデータを作成するAccessからAPIをコールしてクラウドサービスから情報を取得することになりました。 APIの引数と戻り値の形式はJSONフォー...
ABOUT ME
アズビーパートナーズ
プログラマー→社内SE→SIerのお仕事をしています。 メーカー勤務を経て、中小企業の社内SE、フリーランスなど様々な形態で働いてきました。 業務上生まれた困った…を解決してきたTipsを備忘録も兼ねて公開しています。 困っている誰かのお役に立てれば幸いです。