当我运行它时,它给我一个错误说
if语句中的ByRef参数类型不匹配
。
我将所有数组声明为变体,但是当我尝试运行该函数时,这也给了我一个错误。
非常感谢任何帮助。
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
答案 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