2014-08-28 289 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