所需的变量不能使用括号分配给此表达式

时间:2017-11-28 08:27:32

标签: excel vba excel-vba

我正在用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是不合逻辑的,但是我不知道为什么,对于基本情况它是这样的。

如果我只使用基本类型,它可以工作。我认为这与用户定义类型有关。

所以,我有两个问题:

  • 当我在示例中添加括号时,什么是VBA组合?
  • 我可以做些什么来避免编译错误并保持相同的比例?

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

1 个答案:

答案 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。这就是错误的原因。