IsInArray函数错误:键入Mismatch VBA

时间:2017-12-08 18:59:10

标签: vba excel-vba excel

当我运行它时,它给我一个错误说

  

ByRef参数类型不匹配

if语句中的

我将所有数组声明为变体,但是当我尝试运行该函数时,这也给了我一个错误。

非常感谢任何帮助。

sub sort()

Dim rowNo As Integer
Dim colNo As Integer
Dim PIList(6) As Long
Dim GSList(2) As Long
Dim FilterList(91) As Long
Dim currCellCont As Long

rowNo = 2
colNo = 2
PIList(6) = Array(0,1,2,3,4,5)
GSList(2) = Array(6,7)
FilterList(91) = Array(89752, 89753, 89754, 89755, 89756, 89757, 89758, 89759, 89760, 89761, 89762, 89763, 89764, 89765, 89766, 89767, 89768, 89769, 89770, 89771, 89772, 89773, 89774, 89775, 89776, 89777, 89778, 89779, 89780, 89781, 89782, 89783, 89784, 89785, 89786, 89787, 89788, 89789, 89790, 89791, 89792, 89793, 89794, 89795, 89796, 89797, 89798, 89799, 89800, 89801, 89802, 89803, 89804, 89805, 89806, 89807, 89808, 89809, 89810, 89811, 89812, 89813, 89814, 89815, 89816, 89817, 89818, 89819, 89820, 89821, 89822, 89823, 89824, 89825, 89826, 89827, 89828, 89829, 89830, 89831, 89832, 89833, 89834, 89835, 89836, 89837, 89838, 89839, 89840, 89841, 89842)
currCellCont = Cells(rowNo, colNo).Value

Do Until IsEmpty(currCellCont)
    If IsInArray(currCellCont, PIList) Then
        Cells(rowNo, 9).Value = "PI"
    ElseIf IsInArray(currCellCont, GSList) Then
        Cells(rowNo, 9).Value = "GS"
    ElseIf IsInArray(currCellCont, FilterList) Then
        Cells(roNo, colNo).Value = "Filter"
    End If
    currCellCont = Cells(rowNo + 1, colNo)
Loop

End Sub


Function IsInArray(lookingFor As Long, arr As Long) As Boolean
    IsInArray = Not IsError(Application.Match(lookingFor, arr, 0))
End Function

1 个答案:

答案 0 :(得分:2)

使用变体数组:

Sub sort()

Dim rowNo As Integer
Dim colNo As Integer
Dim PIList() As Variant
Dim GSList() As Variant
Dim FilterList() As Variant
Dim currCellCont As Long

rowNo = 2
colNo = 2
PIList = Array(0, 1, 2, 3, 4, 5)
GSList = Array(6, 7)
FilterList = Array(89752, 89753, 89754, 89755, 89756, 89757, 89758, 89759, 89760, 89761, 89762, 89763, 89764, 89765, 89766, 89767, 89768, 89769, 89770, 89771, 89772, 89773, 89774, 89775, 89776, 89777, 89778, 89779, 89780, 89781, 89782, 89783, 89784, 89785, 89786, 89787, 89788, 89789, 89790, 89791, 89792, 89793, 89794, 89795, 89796, 89797, 89798, 89799, 89800, 89801, 89802, 89803, 89804, 89805, 89806, 89807, 89808, 89809, 89810, 89811, 89812, 89813, 89814, 89815, 89816, 89817, 89818, 89819, 89820, 89821, 89822, 89823, 89824, 89825, 89826, 89827, 89828, 89829, 89830, 89831, 89832, 89833, 89834, 89835, 89836, 89837, 89838, 89839, 89840, 89841, 89842)
currCellCont = ActiveSheet.Cells(rowNo, colNo).Value
With Worksheets("Sheet1") 'Change to your sheet if always the same or ActiveSheet if on various sheets.
    Do Until currCellCont = 0
        If IsInArray(currCellCont, PIList) Then
            .Cells(rowNo, 9).Value = "PI"
        ElseIf IsInArray(currCellCont, GSList) Then
            .Cells(rowNo, 9).Value = "GS"
        ElseIf IsInArray(currCellCont, FilterList) Then
            .Cells(roNo, colNo).Value = "Filter"
        End If
        rowNo = rowNo + 1
        currCellCont = .Cells(rowNo, colNo).Value
    Loop
End With


End Sub


Function IsInArray(lookingFor As Long, arr() As Variant) As Boolean
    IsInArray = Not IsError(Application.Match(lookingFor, arr, 0))
End Function