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

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

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

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

Q&A

解決済

4回答

1576閲覧

VBAのobject型の存在確認について

kashim

総合スコア38

VBA

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

0グッド

0クリップ

投稿2018/04/09 04:24

お世話になっております。
VBAでobject型の比較を行っているのですが、
返ってくる値が異なる為、下記エラーになってしまうのですがどのようにすればいいでしょうか
ご教授ください。

VBA

1public sub AAA() 2 Dim url as String 3 Dim data as String 4 Dim jsonData as Object 5 6 url = "http://example.com" 7 data = "[{jsonのデータ}]" 8 9 Set jsonData = json返却関数(url,data) 10 11 if jsonData("result") = "0" then 12 msgbox("エラーです") 13 else 14 msgbox("成功") 15 end if 16end sub

上記json返却関数に、urlとデータを渡すと、

失敗時:jsonData("result")に0が入ります
成功時:jsonData("user_name")が作られる (jsonData("result")は作られません)

上記のようにした場合、
成功時、jsonData("result")がない為、引数が不正ですという
エラーになってしまうのですがどのようにすればいいでしょうか。

以上、よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2018/04/09 04:49

json返却関数 についてもコードをご提示ください。
guest

回答4

0

成功時jsonData("result")を作らないのではなく、"0"以外の値を入れればいいのでは?
ないなら作ればいいという安直な考えですが...

投稿2018/04/09 04:37

編集2018/04/09 04:39
syameimaru

総合スコア181

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

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

0

ベストアンサー

成功時には存在しない(エラーがでるような)もので成功、失敗を判断するという仕様自体に問題があります。

json返却関数 の仕様の変更可能なら、下記のようにことを検討するべきですね。

Fuctionの返り値をBoolean型にして、成功か失敗かの判断をする。
object は Byref の引数にする。

あるいは、syameimaruさんの回答のように、成功時でも、jsonData("result")を作ってその中身(0なら成功、それ例外なら成功)で判断する。

仕様変更が無理なら、エラー処理で回避するしかないかと。

コードの一例

vba

1Dim Res As String 2 3On Error Resume Next 4Res = jsonData("result") 5If Err.Number = 0 And Res = "0" Then 6 Msgbox "エラーです" 7ElseIf Err.Number = 9999 Then '9999は、成功時のエラー番号に変更 8 Msgbox "成功" 9Else 10 Msgbox "予期せぬエラーです。エラー番号:" & Err.Number & vbCrLf & Err.Description 11End If 12 13On Error Goto 0

投稿2018/04/09 05:17

hatena19

総合スコア33699

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

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

0

json返却関数の動作を変更できるのなら、syameimaruさんのアドバイスにもある通り、成功時にもjsonData("result")に値(0以外)を返すようにしたほうがいいと思います。

もしjson返却関数に手を加えることができず、jsonData("result") = "0"以外に成否の判定ができないのであれば、エラートラップすればいいと思います。

On Error Resume Next 'エラートラップ開始 Dim strResult As String strResult = jsonData("result") 'resultを変数に取得する(成功時はここでエラー) If Err > 0 Then 'resultの取得がエラーになる⇒成功(strResultには0以外の値をセットする) strResult = "" End IF On Error GoTo 0 'エラートラップ解除 If strResult = "0" Then Msgbox("エラーです") Else Msgbox("成功") End If

参考になれば幸いです。

投稿2018/04/09 05:17

jawa

総合スコア3013

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

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

0

ご自分で作られた「json返却関数」の仕様次第じゃないですか?

もしくは、ご指定のURLから、どういう状態で返ってくるかの仕様次第。

仕様が分からないのに質問されても、誰もわかりません。

投稿2018/04/09 04:33

ExcelVBAer

総合スコア1175

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問