我正在开发带有VBA的宏,由于某种原因,我需要在调用功能时将括号添加到我的变量中。我这样做是为了使我的代码与Mac上的VBA和C 库的数据交换。
。我有一个复制错误的代码样本。
Private Type S0
x As Double
End Type
Private Type S1
s_0 As S0
End Type
Private Type S2
s_1() As S1
End Type
Private Sub RunMe()
Dim l As S2
ReDim l.s_1(1 To 2)
'no error
Call Display(l.s_1(1).s_0)
'compilation error : variable required can't assign to this expression
Call Display((l.s_1(1).s_0))
End Sub
Private Sub Display(d As S0)
MsgBox d.x
End Sub
如您所见,用附加括号调用我的功能显示是不合逻辑的,但我不知道为什么,对于基本情况,这是这样的工作。
如果我仅使用基本类型,则可以工作。我认为这与用户定义类型有关。
所以,我有两个问题:
- 当我在示例中添加括号时,vba的计算是什么?
- 我该怎么做才能避免汇编错误并保持相同的计算?
非常感谢您阅读我并帮助我!
VBA
中的默认变量传递方法是 ByRef
。但是"即使一个叫做的过程已将其参数宣布为BYREF,您也可以通过将每个参数封闭在括号中。"请参阅http://www.cpearson.com/excel/byrefbyval.aspx。
因此,您的Call Display((l.s_1(1).s_0))
尝试将(l.s_1(1).s_0)
作为用户定义的类型S0
ByVal
尝试传递。
但是用户定义的类型可能不会传递。那就是为什么错误。