どうやるのが一般的か知らないですが思い付いた方法を回答します。
まず、以下のクラスを作成します。
VBA
1Public X As Variant
2Public IsObject As Boolean
3
4Public Sub SetX(v As Variant)
5 If VBA.Information.IsObject(v) Then
6 Set X = v
7 IsObject = True
8 Else
9 X = v
10 IsObject = False
11 End If
12End Sub
使い方は次の通り
VBA
1Public Sub test()
2 Dim t_Container As New Container_Class
3 Dim t_X As Variant
4
5 ' オブジェクトの場合
6 t_Container.SetX Sheet1
7 If t_Container.IsObject Then
8 Set t_X = t_Container.X
9 Else
10 t_X = t_Container.X
11 End If
12
13 ' 値の場合
14 t_Container.SetX 1
15 If t_Container.IsObject Then
16 Set t_X = t_Container.X
17 Else
18 t_X = t_Container.X
19 End If
20End Sub
関数の引数にすれば、オブジェクトでも値でも受けれるので
それを利用した感じです。
別にクラスを作らなくても出来ますが、まぁ一例ということで。
2022/01/11 13:58
2022/01/11 14:33
2022/01/12 04:30