在第二个工作表中存在值时删除整行

时间:2015-03-23 08:42:08

标签: excel vba excel-vba

我有2张:sheet1和sheet2。我在单元格A3(sheet1)中有一个值不是常数。还有很多文件在sheet2。

我想要做的是,当单元格A3(Sheet1)中的值与A列(Sheet2)中的值相同时,它将删除找到此值的整个行(Sheet2)。 / p>

这是我的尝试。它不起作用:没有行被删除。

If Worksheets("Sheet1").Range("A3").Text = Worksheets("Sheet2").Range("A:A").Text Then
    Dim f As String
    f = Worksheets("Sheet1").Range("A3")        
    Set c = Worksheets("Sheet2").Range("A:A").Find(f)
    Worksheets("Sheet2").Range(c.Address()).EntireRow.Delete
End If

2 个答案:

答案 0 :(得分:0)

我的猜测是你找不到.Find()的任何内容。因为你没有检查is Nothing你不知道。此外,.Find()会保留您上次搜索时设置的所有搜索参数 - 通过代码或在电子表格中手动设置。虽然只需要What参数,但总是值得为它设置最关键的参数(如下所示),您可能需要将它们全部设置为确保完全你是怎么做的搜索。

Dim f As String

If Worksheets("Sheet1").Range("A3").Text = Worksheets("Sheet2").Range("A:A").Text Then
  f = Worksheets("Sheet1").Range("A3")
  Set c = Worksheets("Sheet2").Range("A:A").Find(What:=f, Match:=[Part|Whole], _
          LookIn:=[Formula|value])
  if not c is Nothing then
    Worksheets("Sheet2").Range(c.Address()).EntireRow.Delete
  else
    MsgBox("Nothing found")
  End If
End If

查看MS docs以查看所有参数及其枚举的内容。

答案 1 :(得分:0)

子测试()

Dim ws As Worksheet

对于x = 1到Rows.Count

如果ThisWorkbook.Sheets(" Sheet2")。Cells(x,1).Value = ThisWorkbook.Sheets(" Sheet1")。Cells(3,1).Value Then ThisWorkbook.Sheets(" Sheet2")。Cells(x,1).EntireRow.Delete

下一个x

End Sub