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/