目安箱 IV

目安箱投稿のルールはこちらをごらんください。
ご意見は電子メールで承っています。
「目安箱」は質問禁止です。技術的な質問はそれぞれの質問箱へどうぞ。

迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。

  新規投稿 ┃ツリー表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃ホーム  
122 / 277 ←次へ | 前へ→

【168】Re:ちょっと気になる現象3 プロパティの参照渡し
Excel  ichinose  - 06/12/24(日) 12:32 -

引用なし
パスワード
   どうやら、参照渡しのパラメータとして、
オブジェクトのプロパティを直接指定した場合、
自動的に値渡しに変更されているようです。

  Call addcalc(a, b, Me.ans)

でMeキーワードを付加してしまうと、ただの変数ではなく、
オブジェクト(Workbook)のプロパティと認識されてしまいます。

値渡しでパラメータが渡されるので
サブプロシジャー(addcalc)内で変数の値を変更しても
呼び出し元の変数(ans)には値の変更の影響がありません。

よって、「2 + 3 = 0」と表示されてしまいます。

このような場合は、第3変数をパラメータとして使用し、

戻り値をプロパティに設定する方法が考えられますね。

Sub main2()
  Dim a As Long
  Dim b As Long
  Dim c As Long
  Me.ans = 0
  a = 2
  b = 3
  Call addcalc(a, b, c)
  Me.ans = c
  MsgBox a & " + " & b & " = " & Me.ans
End Sub

問題はこれで解決します(解決方法は簡単なのですが)。


因みにThisworkbookのモジュールに

'===============================================================
Public ans As Variant
'===============================================================
Sub main()
  Dim a As Long
  Dim b As Long
  ans = 0
  a = 2
  b = 3
  Call addcalc(a, b, ans)
  MsgBox a & " + " & b & " = " & ans
End Sub
'================================================================
Sub addcalc(x As Long, y As Long, z As Long)
  z = x + y
End Sub

これで、Thisworkbook.mainを実行すると、
実行前のコンパイル時のエラーで
「Byref引数の型が一致しない」というエラーが発生します。

上記のmainの

Call addcalc(a, b, ans)



Call addcalc(a, b, me.ans)

に変更すると、

正しい結果は返してくれませんが、エラーにはなりませんでした。

これは、値渡しのパラメータでは、
型のチェックがコンパイル時には行われていないことを意味します。

まっ、「値が受け継がれさえすればよいのですから、そこまでは必要がない」

ということでしょうか?


尚、Vbscriptとでもプロパティを参照渡しでは、渡すことが出来ませんでした。

確認したコードは以下のとおりです。下記のコードをテキストファイルとして保存し、

保存後拡張子をvbsに変更して実行してみてください(例 Test.vbs)

'===================================
dim a,b
dim zzz
dim cc
set cc=new cls
a=2
b=3
cc.bbb=0
call test(a,b,cc.bbb)
msgbox a & " + " & b & " = " & cc.bbb
call test(a,b,zzz)
msgbox a & " + " & b & " = " & zzz
'==================================
sub test(x,y,z)
  z=x+y
end sub
'==================================
class cls
  property get bbb()
   bbb=zzz
 end property
 property let bbb(dat)
   zzz=dat
 end property
end class
1,061 hits

【167】ちょっと気になる現象3 プロパティの参照渡し ichinose 06/12/24(日) 12:29 Excel[未読]
【168】Re:ちょっと気になる現象3 プロパティの参照... ichinose 06/12/24(日) 12:32 Excel[未読]
【170】Re:ちょっと気になる現象3 プロパティの参照... ichinose 06/12/25(月) 16:02 Excel[未読]

  新規投稿 ┃ツリー表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃ホーム  
122 / 277 ←次へ | 前へ→
ページ:  ┃  記事番号:   
0
(SS)C-BOARD v3.8 is Free