
一つの関数の一つのパラメータが異なるユーザ定義型を受けられるようにしたいのですが、どのようにすればいいのでしょうか?
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ランキング
-
クラスメソッドのインスタンス...
-
dllからデータグリッドビューに...
-
プログラミングのクラス、イン...
-
動的配列の構造体の受け渡しに...
-
Ruby on Rails 「attr_accessor...
-
【Ruby on Rails】モデルのメソ...
-
予約語の使い方教えて
-
教えてください。vb5.0
-
railsチュートリアル5章の演習
-
Rails4でJSONのParseErrorを判定
-
テンプレートの特殊化でコンパ...
-
インスタンス内から自分のクラ...
-
PHP DB トランザクション
-
メソッド定義の際の引数で
-
syntax error 一行で書くと
-
singletonメソッドへのアクセス
-
Csvファイルの最終行を取得する...
-
再帰に関する質問です。
-
名前空間
-
Rubyのprettyprintについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数の引数に複数のユーザ定義...
-
ruby:モジュール関数について
-
::ってなに?
-
クラスメソッドのインスタンス...
-
メソッド定義の構文のdefって
-
「arg」は何の略?
-
教えてください。vb5.0
-
get() と find() の違いについて
-
エクセルVBA オートフィルタで...
-
クラス名やモジュール名の競合...
-
実行時エラー450:引数の数が一...
-
エラー「メソッドまたはデータ...
-
テンプレートの特殊化でコンパ...
-
class roomとclassroom どちら...
-
正規表現で両端に文字列を置換
-
Rails コンボボックスの値の保...
-
【BrowseForFolderでデスクトッ...
-
HSTLやSSTL等のI/Oピン
-
Csvファイルの最終行を取得する...
-
VBAで型が一致しないエラー(バ...
おすすめ情報