修改不起作用的INDEX-MATCH

时间:2016-06-22 14:45:52

标签: excel vba excel-vba macros

基本上这应该是一个修改过的INDEX/MATCH公式,但它依赖于另一个工作簿上的变量和标题,并且希望通过只要求它们提供两个参数来使用户更容易。

Option Compare Text
Function DATAFILL(ID_number, source_headerRow) As Variant
    ID_header_name = Cells.Item(1, ID_number.column).Value
    Dim wb As String, ws As String
    Dim ID_src As Range
'check if source_headerRow is an external workbook
    If source_headerRow Like "'" Then
        src = Split(source_headerRow.address(External:=True), "!")(0)
        wb = Replace(Split(src, "]")(0),"[","")
        ws = Split(src, "]")(1)
        id_col = Application.WorksheetFunction.Match(ID_header_name, source, 0)
        Set ID_src = Workbooks(wb).Worksheets(ws).Range(Cells(1, id_col))
    Else
        Set ID_src = Range(Cells(1, Application.WorksheetFunction.Match(ID_header_name, source_headerRow, 0)))
    End If

    headername = "Shift" 'placeholder
    Set addr = Workbooks(wb).Range("A:Z")
    DATAFILL = Application.WorksheetFunction.Index(addr, Application.WorksheetFunction.Match(ID_number, ID_src), Application.WorksheetFunction.Match(headername, source_headerRow, 0))

End Function

我对VBA很陌生,所以我无法准确指出我出错的地方...... 无论我做什么,我都会遇到#VALUE!错误。

或者有没有办法让INDEX/MATCH 用户友好而不需要VBA /宏?

1 个答案:

答案 0 :(得分:0)

你没有说什么行给你VALUE错误。那会有所帮助。 或者是在特定的细胞中?

您还没有在我能看到的任何地方定义“addr”变量类型 并且顶部没有OPTION EXPLICIT,因此默认情况下“addr”将是Variant数据类型。

至少需要Object,最好是Range

您应该将Option Explicit添加到模块的顶部(Option Compare Text之上)并重新编译,直到您可以修复所有错误(如果还有更多)