
一つの関数の一つのパラメータが異なるユーザ定義型を受けられるようにしたいのですが、どのようにすればいいのでしょうか?
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ランキング
-
【VBA】 結合セルに複数画像と...
-
[VB.net] ボタン(Flat)のEnable...
-
Excel VBA 選択範囲の罫線色の...
-
vbaにてseleniumを使用したedge...
-
【マクロ】並び替えの範囲が、...
-
VBAでCOPYを繰り返すと、処理が...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
Vba セルの4辺について罫線が有...
-
【マクロ】切取りの場合、形式...
-
VBAでユーザーフォームを指定回...
-
VBA 入力箇所指定方法
-
2つのマクロでチェックボックス...
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
エクセルの改行について
-
【マクロ】モジュール変数の記...
-
Excelのマクロについて教えてく...
-
VBAの「To」という語句について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ストリームへの保存処理
-
インスタンスとオブジェクト
-
関数の引数に複数のユーザ定義...
-
書籍 メタプログラミングRuby...
-
子クラスのインスタンスから親...
-
rubyのインスタンスのクラス名取得
-
Rubyの継承関係について質問い...
-
Ruby 文法 ブロックの中で自ク...
-
rubyで変数から指定したバイト...
-
rubyでnums.each_char()の意味...
-
Ruby1.9で日付と時刻を合成した...
-
dllからデータグリッドビューに...
-
Ruby on rails のモデルオブジ...
-
お互いをメンバに持つようなク...
-
::ってなに?
-
クラスメソッドのインスタンス...
-
Ruby 特異メソッドのnewが先に...
-
別のクラスのインスタンスの作り方
-
あるクラスの全てのインスタン...
-
プログラミングのクラス、イン...
おすすめ情報