Arrays 检查参数是否为某个数组
我有两个数组,我想作为参数传递给另一个子数组:Arrays 检查参数是否为某个数组,arrays,excel,vba,if-statement,parameter-passing,Arrays,Excel,Vba,If Statement,Parameter Passing,我有两个数组,我想作为参数传递给另一个子数组: Public arr1 As Variant Public arr2 As Variant Sub Main() arr1 = listSheet.Range("E2:G4").Value arr2 = listSheet.Range("H2:J60").Value call mySub(arr1) call mySub(arr2) End sub() 在“其他”子项中,我需要检查传递了哪个数组,但以下选项均不
Public arr1 As Variant
Public arr2 As Variant
Sub Main()
arr1 = listSheet.Range("E2:G4").Value
arr2 = listSheet.Range("H2:J60").Value
call mySub(arr1)
call mySub(arr2)
End sub()
在“其他”子项中,我需要检查传递了哪个数组,但以下选项均不起作用:
sub mySub(ByRef myArr As Variant)
if myArr=arr1 Then
'do actions
end if
'and I also tried:
if myArr is arr1 then
'do actions
end if
end sub
我怎样才能使用IF语句检查这一点,或者以任何其他方式检查是否可行?您可以将变量作为范围对象传递,并使用
is
测试。e、 g:
Option Explicit
Public q8bAnswerList As Variant
Public q9AnswerList As Variant
Public r1 As Range, r2 As Range
Sub Main()
Set r1 = Sheet1.Range("E2:G4")
Set r2 = Sheet1.Range("H2:J60")
Call mySub(r2)
Call mySub(r1)
End Sub
Sub mySub(ByRef MyR As Range)
Dim MyArr As Variant
MyArr = MyR
If MyR Is r1 Then
Debug.Print MyR.Address
Stop
ElseIf MyR Is r2 Then
Debug.Print MyR.Address
Stop
End If
End Sub
为什么不在调用子例程时将数组加上标识符(例如“arr1”)作为字符串发送呢?@MiguelH yeas,这样就可以了;很好的解决方法!但是有没有办法比较数组…?这取决于你想要进行的比较类型。您总是可以同时将两个数组传递给子数组并进行比较?从您的示例中,检查每个列组的&属性将显示维度(它们有本质上的不同)。另外,为什么不将两个ARR同时传递到sub并对其进行预处理呢?@Jeeped:MySub应该对一个数组应用一些转换,唯一的区别是一个小的额外步骤,只需要在其中一个数组上执行,所以我想不传递两个数组是最好的解决方案。LBound UBound也是一个很好的解决方法,但它确实感觉有点。。。不完全是我想要的答案,因为它还涉及到一个额外的步骤,我现在明白了-我以为r1和r2已经是数组了,但实际上它们是范围。现在清楚为什么它不起作用了。谢谢你帮助一个乞丐:)