![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
一つの関数の一つのパラメータが異なるユーザ定義型を受けられるようにしたいのですが、どのようにすればいいのでしょうか?
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ランキング
-
重複確認
-
{ CONTROL Forms.Label.1}が...
-
マクロの記録を使用したマクロ...
-
エクセルのVBAコードについて教...
-
VBAでCOPYを繰り返すと、処理が...
-
vbaにてseleniumを使用したedge...
-
エクセルのマクロについて教え...
-
VBAなくなるの?
-
VBの色を変えるにはどうしたら...
-
VBA一覧取得 再投稿
-
IEを使わないでhtmlテキストを...
-
【VBA】カーソルのある行の1行...
-
Excel 範囲指定スクショについ...
-
vba アクティブシートの名前変...
-
Vba SelStart、SelLen教えてく...
-
for 文の 繰り返し処理に使える...
-
ユーザーフォームに別シートか...
-
久しぶりのプログラミング
-
ExcelのVBAコードについて教え...
-
Excel VBA ダブルクリックで入...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数の引数に複数のユーザ定義...
-
インスタンス変数とクラス変数...
-
インスタンスとオブジェクト
-
ImageButtonのマウスオーバーが...
-
書籍 メタプログラミングRuby...
-
子クラスのインスタンスから親...
-
クラスメソッドのインスタンス...
-
ストリームへの保存処理
-
::ってなに?
-
Pythonについてです。 何回見直...
-
Ruby 特異メソッドのnewが先に...
-
お互いをメンバに持つようなク...
-
get() と find() の違いについて
-
「arg」は何の略?
-
エクセルVBA オートフィルタで...
-
教えてください。vb5.0
-
テンプレートの特殊化でコンパ...
-
What class are you in? には何...
-
変数の隠蔽とは?
-
エラー「メソッドまたはデータ...
おすすめ情報