所需的variables不能用括号分配给该expression式

我用VBA开发一个macros,出于某种原因,当我调用一个函数时,我需要将括号添加到我的variables中。 我这样做是为了使我的代码与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 dx End Sub 

正如你所看到的,使用加号括号来调用我的函数Display是不合逻辑的,但是我不知道为什么,对于基本情况来说,它是这样工作的。

如果我只使用基本types,它的工作原理。 我认为这与用户定义types有关。

所以,我有两个问题:

  • 在我的示例中添加括号时,什么是VBA comportment?
  • 我能做些什么来避免编译错误,并保持相同的方式?

非常感谢您阅读我并帮助我!

VBA的默认variables传递方法是ByRef 。 但是“即使一个被调用的过程已经将其参数声明为ByRef,也可以通过将每个参数括在括号中来强制这些参数成为ByVal。 请参阅http://www.cpearson.com/excel/byrefbyval.aspx

因此,您的Call Display((l.s_1(1).s_0))尝试按照用户定义的typesS0 ByVal传递(l.s_1(1).s_0)

但是用户定义的types不能通过ByVal 。 这就是为什么错误。