我正在用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
正如你所看到的,用附加括号调用我的函数Display是不合逻辑的,但是我不知道为什么,对于基本情况它是这样的。
如果我只使用基本类型,它可以工作。我认为这与用户定义类型有关。
所以,我有两个问题:
非常感谢您阅读我并帮助我!
答案 0 :(得分:0)
VBA
中的默认变量传递方法是ByRef
。但是“即使被调用的过程已将其参数声明为ByRef,您也可以通过将每个参数括在括号内来强制它们为ByVal。”见http://www.cpearson.com/excel/byrefbyval.aspx。
因此,您的Call Display((l.s_1(1).s_0))
尝试按用户定义的类型(l.s_1(1).s_0)
S0
传递ByVal
。
但是User-defined type may not be passed ByVal。这就是错误的原因。