Excel VBA:“无法获取工作表函数类的匹配属性”匹配时应该存在错误

所以,如果假设Match函数在我的情况下正常工作,那么函数正在search的索引是存在的并且应该显示出来。 问题是它没有。 看看其他一些有Match问题的人,似乎有一些限制。

我基本上使用匹配函数来确定新sorting列表的顺序,例如numsArray提供了一个列表4.我需要两个string:第一个包含两个最小的vals,第二个包含两个最大的。 但是,我需要这两个string按numsArray的最低到最高索引值sorting它们的值。 Array_Values包含已sorting的数组,但numsArray包含要sorting的值的索引。

无论如何,

提供此代码:

 Dim numsArray() As Double Dim Array_Values() As Double Dim high() As Double Dim low() As Double ReDim high(1) ReDim low(1) ReDim numsArray(3) ReDim Array_Values(3) numsArray = (37669.1, 37343.6, 24, 16) Array_Values = ( 16, 24, 37669.1, 37343.6) ' in reality Array_Values = SortFunction(numsArray) 'collect low() Dim tempI1 Dim tempI2 tempI1 = WorksheetFunction.Match(Array_Values(0), numsArray) '***Error Occurs here*** tempI2 = WorksheetFunction.Match(Array_Values(1), numsArray) low(0) = numsArray(WorksheetFunction.Max(tempI1, tempI2)) low(1) = numsArray(WorksheetFunction.Min(tempI1, tempI2)) 'collect high() tempI1 = WorksheetFunction.Match(Array_Values(2), numsArray) tempI2 = WorksheetFunction.Match(Array_Values(3), numsArray) high(0) = numsArray(WorksheetFunction.Max(tempI1, tempI2)) high(1) = numsArray(WorksheetFunction.Min(tempI1, tempI2)) 

我如何得到它的工作? 如果我仍然可以使用Matchfunction,我最好select

Application.Match应该工作,而不是WorksheetFunction

 Sub d() numsArray = Split("37669.1,37343.6,24,16", ",") Array_Values = Split("16,24,37669.1,37343.6", ",") ' in reality Array_Values = SortFunction(numsArray) 'collect low() Dim tempI1 Dim tempI2 tempI1 = Application.Match(Array_Values(0), numsArray) End Sub 

但是请注意,对数组的迭代速度要快10倍。

 Sub d() numsArray = Split("37669.1,37343.6,24,16", ",") Array_Values = Split("16,24,37669.1,37343.6", ",") ' in reality Array_Values = SortFunction(numsArray) 'collect low() Dim tempI1 Dim tempI2 tempI1 = ArrayIndex(numsArray, Array_Values(0)) End Sub Function ArrayIndex(arr, val) as Variant Dim i as Long For i = lBound(arr) to uBound(arr) If array(i) = val then Arrayindex = i GoTO EarlyExit End If Next ArrayIndex = CVerr(2042) 'value NOT found EarlyExit: End Sub