2015-01-06 171 views
0

我試圖創建一個宏來刪除在工作表中除了幾個工作簿之外的列L中包含0值的行。我發現了一個可以在activesheet上執行此操作的宏,我試圖將它嵌套在循環遍歷所需表單的函數中,但它仍然只刪除活動表單中的零。任何人都可以看到我做錯了什麼?刪除除了幾個工作表之外的所有包含零的行

下面是代碼:

Sub nul_waarden_verwijderen() 

Dim WS As Worksheet 
Dim lngMyRow As Long 
Application.ScreenUpdating = False 

    For Each WS In ActiveWorkbook.Worksheets 
     If WS.Name <> "TB per 29122014" And WS.Name <> "SCOA" And WS.Name <> "105 Enterprise klad" And WS.Name <> "105 rekenblad" And WS.Name <> "list" Then   
      For lngMyRow = Cells(Cells.Rows.Count, "E").End(xlUp).Row To 2 Step -1 
       If Val(Cells(lngMyRow, "L")) = 0 Then 
        Rows(lngMyRow).EntireRow.Delete 
       End If 
      Next lngMyRow 
     End If         
    Next WS 

End Sub 
+1

如果我沒有記錯的話,你必須添加「WS」在.Cells和.Rows – EngJon

+1

面前預選賽如果你只寫'行()'這是一樣寫'ActiveSheet.Rows ()'。您需要通過在循環中將其作爲'WS.Rows()'寫入您想要使用的工作表的代碼。 – Aiken

回答

1

你必須使用在.Cells和.Rows前面的預選賽中,以便它在一個特定的工作表的工作。沒有這個限定符,這兩個引用ActiveSheet.Cells和ActiveSheet.Rows。

For Each WS In ActiveWorkbook.Worksheets 
    If WS.Name <> "TB per 29122014" And WS.Name <> "SCOA" And WS.Name <> "105 Enterprise klad" And WS.Name <> "105 rekenblad" And WS.Name <> "list" Then 
     For lngMyRow = WS.Cells(Cells.Rows.Count, "E").End(xlUp).Row To 2 Step -1 
      If Val(WS.Cells(lngMyRow, "L")) = 0 Then 
       WS.Rows(lngMyRow).EntireRow.Delete 
      End If 
     Next lngMyRow 
    End If 
Next WS 
+0

謝謝,沒想到它是這麼簡單,我可能盯着我的屏幕稍微長一點;) – user4373888

+0

它確實有效,但是1和-1之間的一些值(例如0,23)也被擦除。我試圖將0更改爲0.000和「0.000」,但沒有奏效。有任何想法嗎? – user4373888

+0

擺脫'Val'。簡單地使用'如果WS.Cells(lngMyRow,「L」)= 0然後...' – EngJon

相關問題