VBA崩溃结束声明或重置当数组分配给范围内的子
我遇到了VBA崩溃的问题,只要在debugging时通过End Statement或Resetbutton提前结束代码。 这只发生在一个数组被分配给从子部件调用的子例程内的范围内时。
Sub TestSub() Dim array1() as variant Call GetArray(array1) End End Sub
代码将崩溃是结束语句位于Main Sub或被调用的Sub。
Private Sub GetArray(ByRef array1) array1 = Range(Cells(1, 1), Cells(2, 2)) End Sub
为什么会发生这种情况,有没有一个解决scheme没有分配数组与主要的子。
如果你想从一个范围内获得一个数组,使用一个UDF:
Public Function GetArray() As Variant GetArray = Range(Cells(1, 1), Cells(2, 2)) End Function Sub main() Dim arry arr = GetArray() MsgBox LBound(arr, 1) & vbCrLf & UBound(arr, 1) & LBound(arr, 2) & vbCrLf & UBound(arr, 2) End Sub
如果你把这些语句之一,它不会崩溃
Private Sub GetArray(ByRef array1()) Private Sub GetArray(ByRef array1() as variant)
注意:如果您在开发VBA中键入…
a(,n) as string
语法错误会使VBA Excel和Outlook崩溃。 我没有尝试其他Office应用程序。
只要在一个空的模块上input它就会使VBA应用程序崩溃。
显然parsing器不能使用该语法组合。
如果inputmultidimensional arrayAND的语法
- inputAND的最小有效维度
- 有更重要的维度是空的
然后
该应用程序将崩溃
EG – 所有这些将立即崩溃
a(,1) as string a(,,,1) as string a(1,1,,1) as string
但这些不会
a(,) as string a(,,1,) as string a(1,1,,) as string