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