Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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
Vba 查找并将一个工作表中的行替换为另一个工作表中的行_Vba_Excel - Fatal编程技术网

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

Vba 查找并将一个工作表中的行替换为另一个工作表中的行,vba,excel,Vba,Excel,我有两本工作簿,两种布局都是一样的。VBA代码所在的工作簿是我的原始工作簿,第二本工作簿包含一些重叠信息。我试图对第二个工作簿上的每一行执行的操作是在原始工作簿上查找该行,并在其上复制该行信息,如果未找到该行,则将该行添加为新行。我正在比较G列,因为该列的数据永远不会更改。这是一个唯一的ID 我在上遇到编译错误(未找到方法或数据成员)。联机查找:- Set rngFound = .Find(What:=cell.Value, LookIn:=wbol.Worksheets("DLT Format

我有两本工作簿,两种布局都是一样的。VBA代码所在的工作簿是我的原始工作簿,第二本工作簿包含一些重叠信息。我试图对第二个工作簿上的每一行执行的操作是在原始工作簿上查找该行,并在其上复制该行信息,如果未找到该行,则将该行添加为新行。我正在比较G列,因为该列的数据永远不会更改。这是一个唯一的ID

我在上遇到编译错误(未找到方法或数据成员)。联机查找:-

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
我已经修改了我的代码,现在我在同一行上得到了objectrequired错误。我是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
“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)
前面的。在“.cell.Value”中很重要。有关查找方法的更多信息,请访问

您还可以在代码中直接执行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

我是VBA新手,所以我试图通过网站等来蒙混过关。我不确定我是否理解你的意思。我已将.find行更改为“Set rngFound=RangeToSearch.find(What:=cell.Value,LookIn:=xlValues,SearchOrder:=xlByRows,SearchDirection:=xlNext,MatchCase:=True)”,但我得到了一个对象必需的错误。抱歉,RangeToSearch实际上就是您正在搜索的范围。在您的情况下,它将是您最初放置在“LookIn”中的内容:wbol.Worksheets(“覆盖模板”).Range(“G:G”)。我将编辑Clarity的答案,但仍然会遇到对象错误。我将用更改后的代码更新我的问题。我已经修改了代码进行了一些更正,我应该首先包括完整的部分-我的道歉。仍然在同一行上获得相同的对象需要错误:-Set rngFound=工作簿(“覆盖模板”)。工作表(“覆盖模板”)。范围(“G:G”)。查找(What:=r.Value,LookIn:=xlValues,SearchOrder:=xlByRows,SearchDirection:=xlNext,MatchCase:=False)