作者:长大的夜夜 | 来源:互联网 | 2023-05-23 14:47
VBA问题.我用它来制作Solidworks宏,但这并不重要.
有人可以解释语法将数组(类型为Double的1维,长度为3)传递给子例程或函数,以便我可以修改内容.我知道他们必须通过引用传递.我说的是确切的语法,因为我尝试的所有内容都会在子例程/函数调用中出现类型不匹配错误.
我正在寻找的是Doubles数组的正确Dim语句,初始化语句使所有数组值为零,然后是我需要的子程序调用语句和子程序头.如果我需要使用变量类型或动态数组,请具体说明,即使我已经知道数组的类型和大小.使用函数或子函数,我不关心哪个.
我的代码现在工作正常,但是当我使用数组时,我已经厌倦了避免函数和子程序调用.我在这里看过无数的文档和类似的问题,但我无法弄明白.非常感谢.
1> David Zemens..:
这是相当简单的,使用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