我注意到在使用ParamArray和传递数组元素时VBA有些奇怪.在某些情况下,它不是数组元素的值到达函数,而是var指针.(Excel 2016,32位).
在经历了一些沉闷之后,我发现函数作为变量数组的定义 - 与参数列表结合使用ParamArray- 似乎是意外行为的起源,但我看不出任何可行的原因,为什么会这样.
在以下情况下,行为恢复正常:
1)在函数声明中删除变量r
2)b声明Dim b()
3)函数返回a Variant,而不是aVariant()
我理解这是一个相当深奥的问题,它似乎可以通过各种方式控制,但是有没有解释这种行为的解释?
Sub Variantarraybug()
Dim b: b = [{1, 2, 3}]
Debug.Print farray1(2, b(1))(0)
Debug.Print Application.WorksheetFunction.Sum(farray1(2, b(1)))
Debug.Print Join(farray1(2, b(1)), " ")
Debug.Print farray2(2, b(1))(0)
Debug.Print Application.WorksheetFunction.Sum(farray2(2, b(1)))
Debug.Print Join(farray2(2, b(1)), " ")
Debug.Print VarPtr(b(1)), VarPtr(b(2))
End Sub
Function farray1(r, ParamArray plop()) As Variant
farray1 = Array(plop(0), 3)
End Function
Function farray2(r, ParamArray plop()) As Variant()
farray2 = Array(plop(0), 5) …Run Code Online (Sandbox Code Playgroud) 以下崩溃有什么理由擅长2016年?
Option Explicit
Option Compare Text
Option Base 1
Sub p1()
Dim t(1), w()
t(1) = w
If IsMissing(w) Then DoEvents
If IsMissing(t(1)) Then DoEvents
End Sub
Run Code Online (Sandbox Code Playgroud)
w是一个外行数组,但传递w到ismissing(w)是细的,但通过使当它t(1),EXCEL再现地终止非正常...
这是我使用vba设法生成的最短代码,它总是杀死excel应用程序(即不使用外部代码,如createobject或shell).
还有其他这样的例子吗?
干杯