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

Arrays 数组中的工作表对象是否自动清除?,arrays,vba,excel,Arrays,Vba,Excel,嗯,我遇到了一个奇怪的错误,我不知道为什么会发生。让我详细介绍一下这个程序是如何工作的。因此,对于这个程序,我填充了一个充满不同内容的数组。第一个元素Array\u WS(0)是工作表对象,下一个元素Array\u WS(1)是工作表的标题行号,以此类推。。当我将Array\u WS传递给另一个过程时,一切正常。但是,当我输入With语句时,With Array_WS(0)会清除该元素……是的,您听对了。当我单步执行代码时,就在分配With-Array\u-WS(0)Sheet1之前……然后在输

嗯,我遇到了一个奇怪的错误,我不知道为什么会发生。让我详细介绍一下这个程序是如何工作的。因此,对于这个程序,我填充了一个充满不同内容的数组。第一个元素
Array\u WS(0)
是工作表对象,下一个元素
Array\u WS(1)
是工作表的标题行号,以此类推。。当我将
Array\u WS
传递给另一个过程时,一切正常。但是,当我输入With语句时,
With Array_WS(0)
会清除该元素……是的,您听对了。当我单步执行代码时,就在分配
With-Array\u-WS(0)
Sheet1之前……然后在输入With语句后,bam,
Array\u-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
子WTF(阵列作为变体)
暗淡的巨大价值%
使用数组_WS(0)

greatValue=.Cells(1,1).Value2即使将单个对象作为变量数组传递也会产生问题。以下内容将在第三个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

即使将单个对象作为变量数组传递也会产生问题。以下内容将在第三个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

您正在滥用数组和变体。它们并不意味着包含两种不同类型的数据-我怀疑发生了一些奇怪的事情,因为您有一个不同类型的数组(至少目的是拥有它们),您正在滥用数组和变体。它们并不意味着包含两种不同类型的数据——我怀疑发生了一些奇怪的事情,因为您有一个不同类型的数组(至少目的是拥有它们)