C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: Listboxコントロールの参照渡しについて


(過去ログ 42 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■21888 / inTopicNo.1)  Listboxコントロールの参照渡しについて
  
□投稿者/ dai (10回)-(2008/07/11(Fri) 15:05:33)

分類:[Microsoft Office 全般] 

【環境】
Excel2000 VBA
Windows XP

いつもお世話になっております。

目的:フォームモジュールで使用しているリストボックスについて、
   クラスモジュール内で編集を行いたいと思っております

現象:その際、参照渡しを利用したいと思っているのですが
   「型が一致しない」というエラーが出力されてしまいます

質問:リストボックスを参照渡しすることは可能か、
   またコードに間違いがないか指導していただければと思います

【フォームモジュール】
Private Sub cbnSearch_Click()

  'lstReslt(リストボックスです)
'クラスへ参照渡し
Call m_clsSearch.SearchType(lstResult)

End Sub

【クラスモジュール】
Public Sub SearchType(ByRef ref_lstRelust As ListBox)

  'リストに文字列を追加
Call ref_lstRelust.AddItem("文字列", 0)

End Sub

以上、宜しくお願い致します。

引用返信 編集キー/
■21895 / inTopicNo.2)  Re[1]: Listboxコントロールの参照渡しについて
□投稿者/ nakaP (22回)-(2008/07/11(Fri) 15:46:00)
No21888 (dai さん) に返信
> Public Sub SearchType(ByRef ref_lstRelust As ListBox)

Public Sub SearchType(ByVal ref_lstRelust As MSForms.ListBox)
としてください。
ListBoxのみだとVB6のruntimeを見に行っているようです。

引用返信 編集キー/
■21904 / inTopicNo.3)  Re[1]: Listboxコントロールの参照渡しについて
□投稿者/ まどか (559回)-(2008/07/11(Fri) 16:31:16)
> 質問:リストボックスを参照渡しすることは可能か、

参照型を参照渡しで渡す必要性は非常に限定的ですので(そういう仕様で無い限り)
ByValにしてください。

「値型と参照型」「値渡しと参照渡し」
Sub xxx1(ByVal p As Integer)
p = 789
End Sub
Sub xxx2(ByRef p As Integer)
p = 789
End Sub
Sub yyy1(ByVal p As MyCustomClass)
p.Property1 = 789
End Sub
Sub yyy2(ByRef p As MyCustomClass)
p.Property1 = 789
End Sub
Sub yyy3(ByVal p As MyCustomClass)
p = New MyCustomClass
End Sub
Sub yyy4(ByRef p As MyCustomClass)
p = New MyCustomClass
End Sub

Sub Test()

Dim x As Integer

x = 1
Call xxx1(x)

x = 1
Call xxx2(x)

Dim y As MyCustomClass

y = New MyCustomClass
y.Property1 = 1
Call yyy1(y)

y = New MyCustomClass
y.Property1 = 1
Call yyy2(y)

y = New MyCustomClass
y.Property1 = 1
Call yyy3(y)

y = New MyCustomClass
y.Property1 = 1
Call yyy4(y)

End Sub

各Subの中で受け取った引数に変更を与えると、Test内の x と y がどうなるかということです。

引用返信 編集キー/
■21993 / inTopicNo.4)  Re[2]: Listboxコントロールの参照渡しについて
□投稿者/ dai (11回)-(2008/07/14(Mon) 18:38:58)
回答ありがとうございます。

MSForms.ListBoxを記載してみたのですが、
やはりエラーが出力されてしまいました。
VBAだからなのか??

結論として、参照渡しはむかないということで
値渡しを利用して対応するとにしました。
(フォームモジュールにコード記載したくないので、クラスで処理しようと思っただけなので)

遅くなりましたが、ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -