一つの関数の一つのパラメータが異なるユーザ定義型を受けられるようにしたいのですが、どのようにすればいいのでしょうか?
Public Type TypeA
strCodeA As String
intNumA As Integer
End Type
Public Type TypeB
strCodeB As String
intNumB As Integer
End Type
Public Function funcTest(arg1 As Variant) As Integer
(略)
End Function
と記述して関数を
Dim datA As TypeA
iResult = funcTest(datA)
と呼び出そうとすると、次のようなエラーメッセージが表示されて進みません。
コンパイルエラー:
パブリックオブジェクトモジュールで定義されたユーザー定義型に限り、変数に割り当てることができ、実行時バインディングの関数に渡すことができます。
No.2ベストアンサー
- 回答日時:
ユーザ定義型ではなく、クラスを使いましょう。
インスタンスの生成(New)と破棄に気をつければ、ユーザー定義型と殆ど同じ使い勝手です。
例えば
---------------------- Class1'TypeAの代わり
Option Explicit
Public strCodeA As String
Public intNumA As Integer
---------------------- Class2'TypeBの代わり
Option Explicit
Public strCodeB As String
Public intNumB As Integer
としておいて
Dim TypeA1 As New Class1
Dim TypeB1 As New Class2
TypeA1.strCodeA = "Code1"
TypeB1.strCodeB = "Code2"
Call funcTest(TypeA1) 'call funcTest(TypeA)もどき
Call funcTest(TypeB1) 'call funcTest(TypeB)もどき
という風に出来ます。
funcTestでは
Public Function funcTest(arg1 As Variant) As Integer
Dim c1 As Class1
Dim c2 As Class2
If TypeOf arg1 Is Class1 Then '引数がClass1
Set c1 = arg1
Debug.Print c1.strCodeA
Else
If TypeOf arg1 Is Class2 Then '引数がClass2
Set c2 = arg1
Debug.Print c2.strCodeB
End If
End If
End Function
のようにすればいいでしょう。
迅速且つ的確な御回答、ありがとうございました。
クラスモジュールはあまり使ったことがなかったのですが、おかげで視野が少し広がったような気がします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでファイル名を指定して保存するとき 4 2023/03/26 21:55
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
VBA listBoxについて
-
ExcelのVBAコードについて教え...
-
エクセルのマクロについて教え...
-
VBAを使用した時間管理
-
左右の表のキー位置を合わせたい
-
【VBA】マクロの入ったファイル...
-
エクセルの合計を自動で表示さ...
-
VBA 複数の各シートに行を追加...
-
VB.netのADOってなんですか?
-
VBAコードについて教えてくださ...
-
エクセルVBAの配列について
-
エクセルVBAにて =A1=B1とすれ...
-
ExcelのVBAコードについて教え...
-
VBAのコードを教えてください
-
Outlookの「受信日時」「件名」...
-
ユーザーフォームに別シートか...
-
VBAの質問になります Userform内で
-
ExcelのVBAコードについて教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Ruby 特異メソッドのnewが先に...
-
Ruby on rails のモデルオブジ...
-
どういうプログラムで組みます...
-
別のクラスのインスタンスの作り方
-
インスタンス変数とクラス変数...
-
rubyで変数から指定したバイト...
-
子クラスのインスタンスから親...
-
rubyのインスタンスのクラス名取得
-
インスタンスとオブジェクト
-
Cygwin RubyでのIE
-
rubyでnums.each_char()の意味...
-
あるクラスの全てのインスタン...
-
関数の引数に複数のユーザ定義...
-
::ってなに?
-
Ruby1.9で日付と時刻を合成した...
-
Rubyの継承関係について質問い...
-
クラスメソッドのインスタンス...
-
ImageButtonのマウスオーバーが...
-
ruby:モジュール関数について
-
お互いをメンバに持つようなク...
おすすめ情報