Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/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
Excel vba-应用程序。索引返回错误值_Excel_Vba - Fatal编程技术网

Excel vba-应用程序。索引返回错误值

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

我有一个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 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)