修改不起作用的INDEX-MATCH

基本上这应该是一个修改后的INDEX/MATCH公式,但是将依赖于另一个工作簿上的variables和头文件,以及希望通过只需要提供两个参数来简化用户。

 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很新,所以我不能确切地指出我要去哪里错了…不pipe我做什么,我都会得到#VALUE! 错误。

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

你不会说哪一行会给你带来VALUE错误。 这将有所帮助。 还是在特定的细胞?

你还没有定义“addr”variablestypes,我可以看到任何地方,你没有OPTION EXPLICIT在顶部,所以默认“addr”将是一个Variant数据types。

它至less需要是Object ,最好是Range

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