excelとkintoneの連携について(VBA-JSON)

excelからRESTAPIでデータを取得するのに、VBA-JSONLの使用を考えています。

文字列一行や数字は問題なくデータを取得できるのですが

チェックボックスの値をダウンロードすることができません。

https://developer.cybozu.io/hc/ja/community/posts/205059696

上記の書き込みを参考に色々試したのですが

添付の通りエラーメッセージがでてしまいます。

アプリのデータ構造は以下のようになっています。

 

チェックボックスは配列でデータをもっているので

record(“連携フラグ”)(“value”)(0)とした場合は、以下のメッセージになります。

 

record(“連携フラグ”)(“value”)([0])と記載した場合は、以下のメッセージになります。

 

訂正方法をご指導いただけないでしょうか。

よろしくお願いします。

使ったことはありませんが、エラーメッセージを見る限り、有効範囲にないインデックス番号にアクセスしているようなので、恐らく空の配列(連携フラグが何も選択されていないため「value: []」)のインデックス番号0にアクセスしているのではないかと思います。

空の配列かの判定や要素数の判定をしてから実行する方法で解決するかもしれません(VBAでは空の配列は扱いにくいようなので、調べたらいくつか出てきました)。

残念ながらVBAのエディタのローカルウィンドウで見てもデータ構造がよくわかりません。

Debug.Print TypeName(record("連携フラグ")("value"))

で、何者か調べると コレクションとわかります。

VBAのコレクションは1始まりです。

Debug.Print record("連携フラグ")("value")(1)

とするとデータがとれるはずです。

コレクションの存在しない0番目を呼んでいるからエラーになっているということでした。

kintoneから帰ってくるJSONのチェックボックスのデータは配列なのですが、VBA-JSONはdictとコレクションが入り交じって帰ってきます。

mls-hashimoto様・harada様

ご指摘ありがとうございます。

0番目だと思い込んでいました。

取得したデータに連携フラグにチェックが入っていないとき空のためエラーとなってしまいます。

この点、もう少し考えてみようと思います。

連絡ありがとうございました。

フラグがチェックされているかどうかは

record("連携フラグ")("value").Count

で0かどうか/0より大きいかを判定してから

record("連携フラグ")("value")(1)

でデータを取得します。

今回は、違うようですが
連携フラグの選択肢の数が任意の数となる場合は、添え字ではなくFor eachなどですべての要素にアクセスするようになると思います。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。