Excel vba-应用程序。索引返回错误值
我有一个vba函数,它调用Application.Index。 我的问题是,有时它会返回一个在查找范围内不存在的项的值!我有一个iError检查,但它返回false。 在大约150行中,有30行返回错误,其他120行返回正确 如果有人能帮忙,我们将不胜感激! 这是我的密码:Excel vba-应用程序。索引返回错误值,excel,vba,Excel,Vba,我有一个vba函数,它调用Application.Index。 我的问题是,有时它会返回一个在查找范围内不存在的项的值!我有一个iError检查,但它返回false。 在大约150行中,有30行返回错误,其他120行返回正确 如果有人能帮忙,我们将不胜感激! 这是我的密码: Function getQtyOnHand(skuRng As Range, tc As Range, skuCol As Range) As Long Dim index, retVal As Long, sku
Function getQtyOnHand(skuRng As Range, tc As Range, skuCol As Range) As Long
Dim index, retVal As Long, sku As String
sku = skuRng.Value
index = Application.Match(sku, skuCol)
If IsError(index) Then
retVal = 0
Else
retVal = Application.index(tc, index, 0)
End If
getQtyOnHand = retVal
End Function
为清楚起见,以下是发送到此功能的信息:
Dim totalCol As Range, stockSkuCol As Range
Set totalCol = wbStock.Worksheets("MAIN").Range("F:F")
Set stockSkuCol = wbStock.Worksheets("MAIN").Range("A:A")
getQtyOnHand(ws.Range("F2"), totalCol, stockSkuCol)
一些进一步的测试。。。。这里有一个完全独立的函数,显示不正确的输出:
Sub testIndex()
Dim wb1 As Workbook, wb2 As Workbook, ws1 As Worksheet, ws2 As Worksheet
Set wb1 = Workbooks("Output.xlsm")
Set wb2 = Workbooks("STOCK.xlsx")
Set ws1 = wb1.Worksheets("StockList")
Set ws2 = wb2.Worksheets("MAIN")
Dim c1 As Range
Set c1 = ws1.Range("D131")
Dim ind
ind = Application.WorksheetFunction.Match(c1.Value, ws2.Range("A:A"))
Debug.Print (c1.Value & " was found in row " & ind & " whose value is " & ws2.Range("A" & ind))
End Sub
debug.print输出为:
ZM-101 was found in row 100 whose value is YK21222L
!!????(顺便说一下,100是本文档的最后一行)
谢谢,Davey您对
Match
的调用没有指定搜索类型。您仅使用2个参数调用它,默认为1
。您希望使用0
显式调用它以获得精确匹配。通过在普通电子表格中使用公式版本来查看最终参数的效果,可以更好地理解这一点
修正:
以后调用
Application.WorksheetFunction.Match(…,…)
谢谢!!这是其中一个错误…。我感觉就像那种情况,你到处找你的手表,直到你最终意识到你戴着它。。。。☺ - 我错误地将第三个参数放在索引函数中,而不是匹配函数中!!
index = Application.Match(sku, skuCol, 0)