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的语法

  1. inputAND的最小有效维度
  2. 有更重要的维度是空的

然后
该应用程序将崩溃

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