2014-08-28 290 views
0

我已经在下面写了下面的宏,并且它在SMT02工作表上有数据(示例)12345时可以工作。Excel vba在工作表中找到值并删除行

因此,如果12345存在,它会保留这些行并用其他数据删除剩余的行。

但我希望它以这种方式工作,即使12345不存在,那么我仍然希望删除其他所有内容(行)。目前它调试并停止。任何人都可以帮忙吗?

Dim c As Range 
Dim SrchRng 

Sheets("SMT02").Select 
Range("B1").Select 
Set SrchRng = ActiveSheet.Range("B1", ActiveSheet.Range("B65536").End(xlUp)) 
Do 
    Set c = SrchRng.Find("12345", LookIn:=xlValues) 
    If Not c Is Nothing Then c.EntireRow.Delete 
Loop While Not c Is Nothing 
+0

你能说你想做什么吗?如果我们正在修复代码中的错误,我们无法弄清楚自己的代码需要什么。 – rakslice 2014-08-28 04:57:07

+0

我想删除所有不包含“12345”的行,只保留“12345”的行 但是 - 如果找到的电子表格数据没有“12345”,它应该仍然删除所有其余的没有“12345”的行基本上,删除后表格应该是空白的(如果“12345”不存在)。希望我解释得很对。 谢谢。 – kpatel 2014-08-28 05:26:16

+0

使用[自动填充](http://stackoverflow.com/questions/11631363/how-to-copy-a-line-in-excel-using-a-specific-word-and-pasting-to-another-excel- S)? – 2014-08-28 06:27:20

回答

0

如果你想删除的每个行中的工作表时,值“12345”是不存在于指定列的(B栏在您的示例)上的特定片材的细胞(SMT02在您的示例)我想你会发现这个工作原理:

Sub DeleteRowIfNot12345() 

    Dim Rng As Range 
    Dim x As Long 

    Sheets("SMT02").Select 

    Set Rng = Range("B1:B" & Range("B65536").End(xlUp).Row) 
    For x = Rng.Rows.Count To 1 Step -1 
     If InStr(1, Rng.Cells(x, 1).Value, "12345") = 0 Then 
      Rng.Cells(x, 1).EntireRow.Delete 
     End If 
    Next x 

End Sub 
+0

谢谢。但是,如果我使用上面这个,它不会删除任何/任何行。它只是坐在那里无所事事。 – kpatel 2014-08-28 22:08:11

+0

我再次查看并测试它,但无法使其失败,除非表名不同。以下是我如何设置:https://flic.kr/p/oXkM5M – sallyapplepie 2014-08-29 03:23:28