AccessのVBAからWebAPIをコールする方法です。
私はインセンティブ配信用のURLをAPI関数を使って取得するために利用しました。
アズビーパートナーズ


会社でプレゼント企画を実施するなら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フォーマット。 VBAではなかなか使わないフォーマットで…
コメント