Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
Excel 在VLOOKUP周围循环以在成功时删除行_Excel_Vba_Vlookup - Fatal编程技术网

Excel 在VLOOKUP周围循环以在成功时删除行

Excel 在VLOOKUP周围循环以在成功时删除行,excel,vba,vlookup,Excel,Vba,Vlookup,我尝试在Excel 365的工作表中循环返回数据,当满足某些条件时,删除该条件适用的行。在我使用工作簿VLookUp函数作为最终条件的一部分之前,一切都很好-如果任何条件为真或VLookUp成功,我需要删除该行(VLookUp中的错误意味着该行应该保留)。我目前拥有的是: On Error Resume Next divFile = "C:\....\workbook.xlsx" Set divWorkbook = Workbooks.Open(divFile) Set divRange = d

我尝试在Excel 365的工作表中循环返回数据,当满足某些条件时,删除该条件适用的行。在我使用工作簿VLookUp函数作为最终条件的一部分之前,一切都很好-如果任何条件为真或VLookUp成功,我需要删除该行(VLookUp中的错误意味着该行应该保留)。我目前拥有的是:

On Error Resume Next
divFile = "C:\....\workbook.xlsx"
Set divWorkbook = Workbooks.Open(divFile)
Set divRange = divWorkbook.Worksheets("Sheet3").Range("B2:B274")

For i = lastRow To firstDataRow Step -1
    If Condition1 Or _
       Condition2 Or _
       WorksheetFunction.VLookup(Cells(i, lcCol).Value, divRange, 1, False) Then
        If Err.Number = 0 Then
            Rows(i).Delete
        End If
   End If
Next i
以上内容会切换到另一个工作簿(divWorkbook),但不会执行预期的操作。当vlookup成功时,我如何将注意力集中在当前工作簿和工作表上,并应用删除操作,而不是在vlookup失败时应用删除操作

谢谢,
Ben

我会在下一步的错误恢复中删除
,而是使用
应用程序.Match
,测试返回值是否有错误

此外,正如@controlnetic.nomad所指出的,更明确地说明您正在处理的工作表

Dim shtData As Worksheet

Set shtData = ActiveSheet ' or whatever

divFile = "C:\....\workbook.xlsx"
Set divWorkbook = Workbooks.Open(divFile)
Set divRange = divWorkbook.Worksheets("Sheet3").Range("B2:B274")

For i = lastRow To firstDataRow Step -1
    If Condition1 Or Condition2 Or _
       Not IsError(Application.Match(shtData.Cells(i, lcCol).Value, divRange, 0)) Then

            shtData.Rows(i).Delete

   End If
Next i

我会在下一步的错误恢复中删除
,改为使用
应用程序.Match
,测试返回值是否有错误

此外,正如@controlnetic.nomad所指出的,更明确地说明您正在处理的工作表

Dim shtData As Worksheet

Set shtData = ActiveSheet ' or whatever

divFile = "C:\....\workbook.xlsx"
Set divWorkbook = Workbooks.Open(divFile)
Set divRange = divWorkbook.Worksheets("Sheet3").Range("B2:B274")

For i = lastRow To firstDataRow Step -1
    If Condition1 Or Condition2 Or _
       Not IsError(Application.Match(shtData.Cells(i, lcCol).Value, divRange, 0)) Then

            shtData.Rows(i).Delete

   End If
Next i

尝试指定要从中删除行的工作表:例如:
工作表(“Sheet1”)。行(i)。删除
谢谢。我确实让它更具体。请尝试指定要从中删除行的工作表:例如:
工作表(“Sheet1”)。行(I)。删除
谢谢。我确实说得更具体了。谢谢你的帮助。我根据你的反应制定了解决方案,它奏效了。我确实添加了一行
shtData。激活
以保持或至少将焦点返回到当前工作表。感谢您的帮助。我根据你的反应制定了解决方案,它奏效了。我确实添加了一行
shtData.Activate
,以保持或至少将焦点返回到当前工作表。