查找并将一个工作表中的行替换为另一个

时间:2016-03-29 12:12:21

标签: excel vba excel-vba

我有两个工作簿,两个布局都是一样的。 VBA代码的工作簿是我的原始工作簿,第二个工作簿有一些覆盖信息。我想要做的是第二个工作簿上的每一行都是在原始文件中找到它并在其上复制此行信息,如果找不到它,则将该行添加为新行。我将列G作为此列进行比较,数据永远不会更改,这是唯一的ID。

我在.Find on line上收到编译错误(找不到方法或数据成员): -

Set rngFound = .Find(What:=cell.Value, LookIn:=wbol.Worksheets("DLT Formatted").Range("G:G"), _
                        SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)

这是我到目前为止的VBA代码: -

Set wbol = Workbooks.Open("C:Documents\Overlay.xls")    
Set sht2 = Workbooks("Overlay").Worksheets("Overlay Template")
            With sht2
                For Each Row In Range("G:G")
                    Set rngFound = .Find(What:=cell.Value, LookIn:=wbol.Worksheets("Overlay Template").Range("G:G"), _
                            SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
                    If Not rngFound Is Nothing Then
                        rngFound.Select
                        Selection.Copy
                        Workbooks("Original Template").Worksheets("original").Range(rngFound).PasteSpecial
                    End If
                    Next
            End With

我修改了我的代码,现在我得到了同一行上的Object required错误。我是VBA的新手,所以不确定我理解为什么会这样: -

With sht2
        For Each Row In Range("G:G")
            Set rngFound = wbol.Worksheets("Overlay Template").Range("G:G").Find(What:=cell.Value, LookIn:=xlValues, _
                SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
            If Not rngFound Is Nothing Then
                rngFound.Copy
                Workbooks("Original Template").Worksheets("original").Range(rngFound).PasteSpecial
            End If
        Next
    End With

1 个答案:

答案 0 :(得分:0)

" LookIn"参数只能是以下XlFindLookIn常量之一:xlFormulas,xlValues或xlNotes。

对于要搜索的范围,您可以

Set rngFound = wbol.Worksheets("Overlay Template").Range("G:G").Find(What:=.cell.Value, LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True)

前面的。 in" .cell.Value"很重要有关Find方法的更多信息,请参阅Microsoft website

您也可以在代码中执行直接的rngFound.copy,无需先选择它。

结束代码应该看起来像

    With sht2
        For Each r In .Range("G:G")
            Set rngFound = wbol.Worksheets("Overlay Template").Range("G:G").Find(What:=r.Value, LookIn:=xlValues, _
                        SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
            If Not rngFound Is Nothing Then
                    rngFound.Copy
                    Workbooks("Original Template").Worksheets("original").Range(rngFound).PasteSpecial
            End If
        Next
    End With