1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Word VBAでVBA-JSONを使う

Posted at

はじめに

VBAでサーバーと通信しようとすると、JSON文字列をパースしたいことが多々あると思います。
そこで「VBA-JSON」を使おうと思い立ちましたが、
Wordならではのトラップがありました……

インポート~使ってみる

まずはReadmeのインストールの項目を見てみます。

Download the latest release
Import JsonConverter.bas into your project (Open VBA Editor, Alt + F11; File > Import File)
Add Dictionary reference/class
For Windows-only, include a reference to "Microsoft Scripting Runtime"
For Windows and Mac, include VBA-Dictionary

VBAはパッケージ管理等がないので、直接インポートですね。
”Microsoft Scripting Runtime”を参照設定に加え、いざ実行してみます。

Sub json_conv_test()

    Dim jsonStr As String
    jsonStr = "{" & _
            Chr(34) & "abc" & Chr(34) & ":" & Chr(34) & "ABC" & Chr(34) & "," & _
            Chr(34) & "def" & Chr(34) & ":" & Chr(34) & "DEF" & Chr(34) & _
            "}"
    '{"abc":"ABC","def":"DEF"}
    JsonConverter.ParseJson (jsonStr)
    
End Sub

ところが……

JsonDictionaryError.png

**「Newキーワードの使用法が不正です」**と、コンパイルエラーが出ました。

Dictionaryの検証

Word VBAは情報が非常に少ないです。宿命ですね。

まずは落ち着いて "Dictionary" のドキュメントを読みに行きます。
エディタでDictionaryを選択して F1 を押すと

image.png

なんと、WordからもDictionaryオブジェクトがはえていました。

WordにもDictionaryオブジェクトがあるのですね(カスタム辞書機能)。
それでScripting.Dictionaryを呼び出したいのに、Word.Dictionaryが呼び出されていたことがエラーの原因でした。

解決

そこで、ソースの一部を修正します。

Private Function json_ParseObject(json_String As String, ByRef json_Index As Long) As Scripting.Dictionary
    Dim json_Key As String
    Dim json_NextChar As String

    Set json_ParseObject = New Scripting.Dictionary
   '(以下省略)

上記のように"Dictionary"を"Scripting.Dictionary"に変更したところ、
無事、エラーなくパースすることができました。

もう一つのつまづき

あと、この方法でJSONをパースしたら配列はArrayではなくCollectionになるようです。
なので要素数の取得には UBoud ではなく .Countを使う必要がありました。
また、要素は 1 から始まるのも忘れかけていました……

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?