我比较两个excel文件的脚本不起作用

时间:2017-06-09 14:24:11

标签: vba

所以我正在编写一个脚本来比较两个excel文件。

我在第一个工作簿中使用For循环来获取我想在第二个工作簿中找到的引用(6450行长,因此没有For循环,慢速的方式)

我一直在寻找一些方法来使用VLOOKUP的东西,但我无法使它工作这是代码:

For i = 7  to numLines ''numLines is the number of used lines of the first workbook

    If '''test to get out of the LOOP
objExcel.Workbooks(Str1).Sheets(1).Range("D"&i)="" AND objExcel.Workbooks(Str1).Sheets(1).Range("H"&i)="" AND objExcel.Workbooks(Str1).Sheets(1).Range("L"&i)="" Then

        i = numLines

    Else '' here i get the reference (the 6 first digits of the first workbook and I try to find it in the second)

        If objExcel.Workbooks(Str1).Sheets(1).Range("D"&i)<>"" Then

            Reference = Mid(objExcel.Workbooks(Str1).Sheets(1).Range("D"&i),1,6)

            Set table_lookup = objExcel.Workbooks(Str1).Sheets(1).Range( "C1:C" & numLines2 )
            cell = objExcel.Workbooks(Str2).WorksheetFunction.vlookup(Reference, table_lookup, 0, False)
            MsgBox cell.row
            MsgBox cell.column

        End If

    End If

Next

1 个答案:

答案 0 :(得分:2)

您必须切换到“查找”方法,而不是似乎无法在vba上运行的vlookup

For i = 7  to numLines
    If objExcel.Workbooks(Str1).Sheets(1).Range("D"&i)="" AND objExcel.Workbooks(Str1).Sheets(1).Range("H"&i)="" AND objExcel.Workbooks(Str1).Sheets(1).Range("L"&i)="" Then
        i = numLines
    Else
        If objExcel.Workbooks(Str1).Sheets(1).Range("D"&i)<>"" Then
            Reference = Mid(objExcel.Workbooks(Str1).Sheets(1).Range("D"&i),1,6)
                Set r = objExcel.Workbooks(Str2).Sheets(1).Range( "C1:C" & numLines2 )
            Set matched = r.Find(Reference)
            If Not r.Find(Reference) Is Nothing Then
                objExcel.Workbooks(Str1).Sheets(1).Range("R"&i).Value = matched.Offset(0,0).Value
                objExcel.Workbooks(Str1).Sheets(1).Range("S"&i).Value = matched.Offset(0,1).Value
                objExcel.Workbooks(Str1).Sheets(1).Range("T"&i).Value = matched.Offset(0,2).Value
                objExcel.Workbooks(Str1).Sheets(1).Range("U"&i).Value = matched.Offset(0,3).Value
                objExcel.Workbooks(Str1).Sheets(1).Range("V"&i).Value = matched.Offset(0,6).Value
            End If            
        End If
    End If
Next