arrays - VBA 通过引用传递数组并修改内容

标签 arrays vba function pass-by-reference subroutine

VBA 问题。我用它来制作 Solidworks 宏,但这并不重要。

有人可以解释将数组(Double 类型的一维,长度为三)传递给子例程或函数的语法,以便我可以修改内容。我知道它们必须通过引用传递。我说的是确切的语法,因为我尝试的所有操作都会在子例程/函数调用中遇到类型不匹配错误。

我正在寻找的是 double 数组的正确 Dim 语句,初始化语句以使所有数组值为零,然后是我需要的子例程调用语句和子例程头。如果我需要使用变体类型或动态数组,请具体说明,即使我已经知道数组的类型和大小。使用函数或子函数,我不在乎哪个。

我的代码现在运行良好,但我厌倦了在使用数组时避免函数和子例程调用。我在这里查看了无数文档和类似问题,但我无法弄清楚。非常感谢。

最佳答案

这是相当简单的,在函数签名中使用 ByRef 关键字将通过引用而不是通过值传递您的数组。这意味着对该数组的操作将被保留并冒泡到调用范围。这可能过于简单化了,但可以这样想:

  • ByRef :您正在传递对事物(数组、对象等)的引用,并且对该事物的任何转换都将在该事物存在的任何地方显而易见。
  • ByVal :您正在传递事物的值表示。本质上,您正在传递它的“副本”。您可以操作此对象,但它与调用范围内的对象不同,它只是一个副本。因此,当封闭范围结束时,您仍然只剩下原始内容。

  • 将您的数组初始化为数字类型,这将为您提供默认的 0 值。

    示例如下:
    Option Explicit
    Sub foo()
        Dim myArray(1 To 3) As Double  'The array is initialized with zero-values 
    
        Call bar(myArray)
    
        MsgBox myArray(3)
    
    End Sub
    
    Sub bar(ByRef dblArray() As Double)
    
        dblArray(1) = 123
        dblArray(2) = 345
        dblArray(3) = 33456
    
    End Sub
    

    关于arrays - VBA 通过引用传递数组并修改内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28326429/

    相关文章:

    web-services - 是否有适用于 VB6/VBA 的 JSON 解析器?

    c++ - 虚函数错误(vtable?)

    javascript - 两个 javascript 'changeimage' 函数,只有一个正在工作

    c# - 如何在没有引用的情况下正确克隆多维数组?

    c - 将列表传递给函数以在 C 中用可变数量的成员填充列表

    javascript - 如何从 Javascript 中的二维数组创建对象数组?

    vba - Excel vba - 拆分函数在循环内给出 'Subscript out of range'错误

    vba - 如果使用 vb 脚本调用宏将被禁用

    java - 为什么数组的负大小不是编译错误而是抛出 java.lang.NegativeArraySizeException

    c - 运行时检查失败 #2 - 变量 'start' 周围的堆栈已损坏