質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

3回答

1892閲覧

VBA MACを使って、JSONデータを HTTP POST で投げたい

Gmac

総合スコア4

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2020/02/24 18:53

編集2020/02/24 18:56

前提・実現したいこと

MAC版 VBAを使って、JSONデータを HTTP POST で投げたい

VBAを使って、HTTP通信の検証用コードを実装しています。
MacScript関数を使って、JSONデータをPOST送信する際に、「プロシージャの呼び出しまたは引数が無効です」
というエラーが発生してしまいます。
VBA MACでJSONデータを上手くPOST送信する方法があれば、ご教示お願い致します。

該当のソースコード

Dim command as string Dim url as string url = "http://test.xx" command = "do shell script ""curl -X POST -H 'Content-Type: application/json' -d '" + "{ ""testID"":""1"" }" + "' " + url + """" result = MacScript(command)

試したこと

VBAを使って、HTTP通信の検証用コードを実装しています。
MacScript関数を使って、jsonデータをPOST送信する際に、「プロシージャの呼び出しまたは引数が無効です」
というエラーが発生してしまいます。
色々試してみたところ、どうやら、JSONデータ内にダブルクオーテーションを使ってしまうと、エラーが発生するところまでは突き止めました。
"{ ""testID"":""1"" }"
だと、エラーが出ますが、
下記だとエラーは発生しませんでした。
"{ 'testID':'1' }"
ですが、シングルクオーテーションでは、パラメータとして不適切として、相手側に認識されてしまうため、
こちらも使うことができません。
この状況で、ダブルクオーテーションを使ってJSONデータをPOST送信することが可能でしょうか。
どなたか、ご存知の方、ご教示お願い致します。

補足情報(FW/ツールのバージョンなど)

エクセルバージョン 16.34
Office 365
Visual Basic for Applications 7.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

こちらのページを参考にすると「二重引用符を使う場合はバックスラッシュ文字を使ってエスケープ処理を行う必要がある」とのことです。

それを踏まえるとこうなると思いますが、いかがでしょうか。

VBA

1 command = "do shell script ""curl -X POST -H 'Content-Type: application/json' -d '" + "{ \""testID\"":\""1\"" }" + "' " + url + """" 2

投稿2020/02/25 02:47

ttyp03

総合スコア17000

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Gmac

2020/02/25 03:33 編集

ご返信ありがとうございます。 下記の記載で試してみたところ、 command = "do shell script ""curl -X POST -H 'Content-Type: application/json' -d '" + "{ \""testId\"":\""1\"" }" + "' " + url + """" やはり、同様のエラーが発生していました。 command の中身をみてみると、バックスラッシュが文字列中にも入っていない様にも見えており、 もう少し調査が必要だと思いました。 "do shell script "curl -X POST -H 'Content-Type: application/json' -d '{ "testId":"1" }' httpxxxxxxx"" ただ頂いた情報は、とても参考になりましたので、こちらでも調査を進めてみたいと思います。
Gmac

2020/02/25 03:45 編集

今情報を集めていて、これかもと思っている部分がありました。 http のところで指定している、スラッシュにも、エスケープが必要かもしれないと思ってきました。 http://127.0.0.1 現在、この路線でも調査しています。
Gmac

2020/02/25 04:01 編集

色々試したのですが、やはり http 部分は、特に問題がなさそうでした。 可能性としては このコードで使用している string 型(command)に落としてしまうと、バックスラッシュが無くなってしまっている 可能性もあるかと感じています。
Gmac

2020/02/25 04:29

ありがとうございます。 頂いたURLの内容は、キーボードからの入力方法に関してですね。 こちらは、解決しております。 m(_ _)m VBAエディタ上もバックスラッシュの文字が出ていることまでは確認しているのですが、 デバッガ上Stringの内容を確認すると、エスケープ文字が無くなっているので、文字データ変換する際に 問題が発生しているのかもと考えていました。。。
guest

0

自己解決

結局、VBAから、JSONデータをHTTP Postする事を諦め、
xlwingsを使って、Pythonを呼び出し、Python上からJSONをHTTP Postする方法を選択しました。

投稿2020/03/03 01:21

Gmac

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

現状、試した事をメモしておきます
ダブルクオーテーションを使う際にはエスケープする必要があるとのことで、バックスラッシュを使用
下記の内容で実施しましたが、同様のエラーは発生しており、現状もまだ解決できていない状況です。
"{ ""testId"":""1"" }"
"{ ""testId"":""1"" }"

¥マークを使う事も試してみました。 String 文字列中にバックスラッシュが入りました。
もしかしたら、¥マークを使った解決策があるかもと考えて調査中です。
command = "do shell script ""curl -X POST -H 'Content-Type: application/json' -d '" + "{ ¥""testId¥"":¥""1¥"" }" + "' " + url + """"

"do shell script "curl -X POST -H 'Content-Type: application/json' -d '{ "testId":"1" }' http:xxxxx""
しかし、これでもエラーは解消しませんでした。。。

もう少し調査して、解決の兆しが見えないのであれば、他の通信方法も含めて検討する必要がありそうです。

投稿2020/02/25 04:36

編集2020/02/25 05:17
Gmac

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問