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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

VBA

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

Q&A

解決済

3回答

4648閲覧

【VBA】【GAS】VBAで送信し、webアプリケーションで処理させたい。

Campanula_11

総合スコア10

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

VBA

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

0グッド

0クリップ

投稿2016/05/30 09:19

#エラー内容
VBAよりエンコードしたパラメータをURLとして送信し、web applicationで処理させようしましたが、web applicationでは受け取っていないようで、結果が反映されませんでした。

ブラウザで、ログアウトした状態で、手打ちでURLにパラメータをつけ、Enterを押すと実行されました。
web application
https://script.google.com/macros/s/AKfycbyRCFy7U-46fr4vspgKG3MN6mcJFC--xkS-9Dn17LI/exec?param1=127
出力確認用spreadsheet
https://docs.google.com/spreadsheets/d/1re7ovZ9pwvWAvIdqc9JSbWePNoyBcXMytUw6nof_G98/edit#gid=0

具体的な原因がわからず困ってしまいました。
どうかご教授ください。よろしくおねがいします。

#VBAのソース
Sub save()
'HTTPリクエストオブジェクト
Dim objXmlHttp As Object
Set objXmlHttp = CreateObject("Microsoft.XMLHTTP")

Dim url As Variant Dim param As Variant url = "https://script.google.com/macros/s/AKfycbyRCFy7U-46fr4vspgKG3MN6mcJFC--xkS-9Dn17LI/exec?" param = "param1%3D127%26param2%3D154%26param3%3D522%26param4%3D112" 'POSTでオープン objXmlHttp.Open "POST", url, False 'httpヘッダの設定(POSTの場合は必要らしい)

Call objXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
'パラメータの送信
objXmlHttp.send (param)
End Sub

#Google apps scriptのソース
function doGet(e) {
var ss = SpreadsheetApp.openById('1amTyICKW0PliX3tJ8urebHNR4Cjn4H0uOB6ehOdwI3g');
var sheet = ss.getSheetByName('シート1');

// 引数のeからパラメータを取得
var param1 = e.parameter.param1;
var param2 = e.parameter.param2;
var param3 = e.parameter.param3;
var param4 = e.parameter.param4;
sheet.getRange(1,1).setValue(param1);
sheet.getRange(1,2).setValue(param2);
sheet.getRange(1,3).setValue(param3);
sheet.getRange(1,4).setValue(param4);
}

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

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

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

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

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

guest

回答3

0

ベストアンサー

Campanula_11さんへ

はじめまして。
VBAはよくわかりませんが、GASへパラメータを送信して処理をさせる場合、POSTで受けるならdoPost({{パラメータ}})、GETで受けるならdoGet({{パラメータ}})で記述すると良いです。

ちなみに処理速度を考慮すると、GAS側の記述は以下のようにしたほうが良いです。

// 引数のeからパラメータを取得 var param = [[ e.parameter.param1, e.parameter.param2, e.parameter.param3, e.parameter.param4 ]]; sheet.getRange(1,1,param.length,param[0].length).setValues(param);

投稿2016/05/30 16:23

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Campanula_11

2017/01/18 04:55

お返事が遅くなりましたが、お陰様でうまく稼働させることができました。 ありがとうございました。
guest

0

URLにパラメータをつけて送信するのであればGETでオープンするべきなのではないでしょうか。

投稿2016/05/30 12:39

KoichiSugiyama

総合スコア3041

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

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

0

objXmlHttp.send のあとで、objXmlHttp.Status が 200 になっていますか?
あと、URLの末尾にある '?' は不要ではないでしょうか。

投稿2016/05/30 12:37

q1701

総合スコア274

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問