2015-01-06 80 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

相关问题