Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 检查参数是否为某个数组_Arrays_Excel_Vba_If Statement_Parameter Passing - Fatal编程技术网

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已经是数组了,但实际上它们是范围。现在清楚为什么它不起作用了。谢谢你帮助一个乞丐:)