数组中的工作表对象自动清除?

那么,我遇到了一个奇怪的错误,我不知道为什么发生。 让我分解这个程序是如何工作的。 所以对于这个程序我填充了一个不同的东西。 第一个元素Array_WS(0)是工作表对象,下一个, Array_WS(1)是工作表的标题行号等等。当我将Array_WS传递给另一个过程时,一切正常。 但是,当我input一个Wi​​th语句时, With Array_WS(0)清除元素出来…你听到的权利。 当我单步执行代码时,之前With Array_WS(0) Sheet1被分配…然后立即在进入With语句后,bam, Array_WS(0)为空。 下面的例子应该使这个更清楚一点。

这是代码的样子:

问题

 Sub WTF(Array_WS as Variant) Dim greatValue% With Array_WS(0) greatValue = .Cells(1,1).Value2 <= this works even though Array_WS(0) is now empty End With greatValue = Array_WS(0).Cells(1,1).Value2 <= outside the With statement throws an exception 

修正

我想到的解决方法就是这样

 Sub WTF(Array_WS as Variant) Dim greatValue%, WS as Worksheet Set WS = Array_WS(0) With WS greatValue = .Cells(1,1).Value2 <= this works End With greatValue = Array_WS(0).Cells(1,1).Value2 <= this also works 

问题

虽然我发现一个解决方法,我只想知道, 为什么会发生这种情况? 。 我是否错过了数组中正在传递的对象是如何工作的? 或者也许是有什么与我没有得到的陈述?

任何帮助将不胜感激!

谢谢,贾斯汀

即使将单个对象作为Variant数组传递也会产生问题。 以下将死在第三个MsgBox上:

 Sub MAIN() Dim ary(1 To 1) As Variant Set ary(1) = ActiveSheet Call routine(ary) End Sub Sub routine(v As Variant) MsgBox v(1).Name With v(1) MsgBox .Name End With MsgBox v(1).Name End Sub 

但是这不会死:

 Sub MAIN() Dim ary(1 To 1) As Worksheet Set ary(1) = ActiveSheet Call routine(ary) End Sub Sub routine(v As Variant) MsgBox v(1).Name With v(1) MsgBox .Name End With MsgBox v(1).Name End Sub