Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2972 / 13644 ツリー ←次へ | 前へ→

【64908】EXCEL VBAからWEBサービス起動 オートメーションエラー 10/3/26(金) 10:56 質問[未読]
【64921】Re:EXCEL VBAからWEBサービス起動 neptune 10/3/26(金) 18:59 発言[未読]
【64946】Re:EXCEL VBAからWEBサービス起動 オートメーションエラー 10/3/29(月) 9:55 回答[未読]
【65010】Re:EXCEL VBAからWEBサービス起動 オートメーションエラー 10/4/1(木) 17:42 お礼[未読]

【64908】EXCEL VBAからWEBサービス起動
質問  オートメーションエラー  - 10/3/26(金) 10:56 -

引用なし
パスワード
   お世話になります。
書き方などいたらぬ点があるかと思いますが宜しくお願いします。

■状況
EXCEL-VBAからWEBサービスを呼び出す方法を検討しています。
WEBサービスの起動はSoapClientで成功しているのですが
引数や戻り値にVBAに存在しない型(構造体やList型)を
使う場合うまくいきません。

■お聞きしたいこと
--------------------------------------
1.クラスモジュールの使い方に誤りがありますでしょうか。
2.戻り値でユーザ定義型のリストを受け取った場合
  どのように処理すれば良いでしょうか。
  例えば戻り値をreturnObject(0)といった配列のように
  取得できますでしょうか。また要素への参照は
  returnObject(0).userIdと指定してもエラーですよね???
--------------------------------------

■WEBサービス仕様
--------------------------------------
 呼び出し方法:testExec(customer)
 要素名:customer
     →データ型:CustomerInfo
     →CustomerInfoは、testIdとtestNameという要素を持ちます
 戻り値:businessList(Businessという構造体のリスト)
--------------------------------------

■構造体代わりに準備したクラスモジュール
'CustomerInfo.cls
--------------------------------------
Option Explicit
Public workTestId As String
Public workTestName As String

Property Get testId() As String
  testId = workTestId
End Property
Property Let testId(ByVal testId As String)
  workTestId = testId
End Property
Property Get testName() As String
  testName = workTestName
End Property
Property Let testName(ByVal testName As String)
  workTestName = testName
End Property
--------------------------------------

■VBAのコード
--------------------------------------
Dim rtnObject As Object
Dim oSoapClient As SoapClient30
Dim customer as CustomerInfo

Set oSoapClient = New oSoapClient30
oSoapClient.mssoapinit(WSDLのパス)
customer.testId = "ID"
customer.testName = "テスト太郎"
Set rtnObject = oSoapClient.testExec(customer) ←【1】質問の1です

'rtnObjectというオブジェクト型でとりあえず受けましたが
'戻り値をどう解析すればいいのでしょう?
'debug.print rtnObject(0).testId ←【2】質問の2です
--------------------------------------

■エラー内容
--------------------------------------
 インターフェイスがサポートされていません。
--------------------------------------

【64921】Re:EXCEL VBAからWEBサービス起動
発言  neptune  - 10/3/26(金) 18:59 -

引用なし
パスワード
   ▼オートメーションエラー さん:
私自身はsoapは挫けていますんで判る所だけ

>--------------------------------------
>1.クラスモジュールの使い方に誤りがありますでしょうか。
使い方というよりその構造に問題があるような。。。
・お作法の問題ですが、各プロパティになぜ、publicを明記しない?
・何故、データ保持用の変数が外部に公開されているのか?

>2.戻り値でユーザ定義型のリストを受け取った場合
>  どのように処理すれば良いでしょうか。
>  例えば戻り値をreturnObject(0)といった配列のように
>  取得できますでしょうか。また要素への参照は
>  returnObject(0).userIdと指定してもエラーですよね???
>--------------------------------------
リストって、.netでの用語であってVBAでは意味が違う。
こちら(VBA)側で構造体の定義をしておかなければ、受けようがないです。
VBAの構造体は特殊なデータ型としての位置付けであって、オブジェクト
のように Set rtnObjectとやっても駄目。

Businessという構造体をVBAで定義してやり
returnObject =
とでもやらなければならないと思います。

【64946】Re:EXCEL VBAからWEBサービス起動
回答  オートメーションエラー  - 10/3/29(月) 9:55 -

引用なし
パスワード
   neptune さん>
アドバイスありがとうございます!
また返信が遅れ申し訳ありません。

>>--------------------------------------
>・お作法の問題ですが、各プロパティになぜ、publicを明記しない?
>・何故、データ保持用の変数が外部に公開されているのか?
これは私のコーディングの問題です。ワーク変数のPublic公開は
ありえないですね。特に外部から使うなどの方法は使っていません。

>>--------------------------------------
>リストって、.netでの用語であってVBAでは意味が違う。
>こちら(VBA)側で構造体の定義をしておかなければ、受けようがないです。
>VBAの構造体は特殊なデータ型としての位置付けであって、オブジェクト
>のように Set rtnObjectとやっても駄目。
>
>Businessという構造体をVBAで定義してやり
>returnObject =
>とでもやらなければならないと思います。
オブジェクト型ならとりあえず受け取るだけならできると
思っておりました…。まずはBusinessという構造体をクラスで定義し
その構造体を配列で宣言のうえ、WEBサービスからの返却値を
受け取れるか動作確認してみます。経過について修正確認後に
報告させて頂きます。

ご回答ありがとうございました。

【65010】Re:EXCEL VBAからWEBサービス起動
お礼  オートメーションエラー  - 10/4/1(木) 17:42 -

引用なし
パスワード
   クラスを使用する手順を検討しておりましたが
DOMでの受け渡しでの実装に手順を変更しました。
結果、問題なく構造体や構造体配列での引数や戻り値の
授受ができましたことを報告いたします。

neptuneさんにアドバイス頂く前に検討していた手順とは
異なる方法での実装になってしまいましたことをお詫びいたします。
クラスに対する誤認のご指摘、今後の糧といたします。

2972 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free