Excel VBA循环并删除条件下的行

Excel VBA循环并删除条件下的行,excel,vba,Excel,Vba,我希望你能帮我写代码 我已经挣扎了很长一段时间了 因此,我们的想法是遍历所有以“209”开头的工作表,然后在A列中删除所有行,除非单元格以4、5或6开头,如果它等于工作表名称,如果它等于209915 问题是,即使我选择了工作簿,我也必须进入每个工作表并运行它,否则它只运行第一个工作表 以下是我编写的代码: Sub loopanddelete() Dim i As Long Dim wb As Workbook Dim ws As Worksheet Applicati

我希望你能帮我写代码

我已经挣扎了很长一段时间了

因此,我们的想法是遍历所有以“209”开头的工作表,然后在A列中删除所有行,除非单元格以4、5或6开头,如果它等于工作表名称,如果它等于209915

问题是,即使我选择了工作簿,我也必须进入每个工作表并运行它,否则它只运行第一个工作表

以下是我编写的代码:

Sub loopanddelete()

   Dim i As Long
   Dim wb As Workbook
   Dim ws As Worksheet

   Application.DisplayAlerts = False
   Application.ScreenUpdating = False
   Application.DisplayStatusBar = False
   Application.EnableEvents = False

   Set wb = ThisWorkbook

   For Each ws In wb.Worksheets

      If Left(ws.Name, 3) = "209" Then

         For i = ws.Range("A10000").End(xlUp).Row To 2 Step -1

             If Left(Cells(i, 1), 1) <> "4" And Left(Cells(i, 1), 1) <> "5" And Left(Cells(i, 1), 1) <> "6" And Left(Cells(i, 1), 6) <> ws.Name And Left(Cells(i, 1), 6) <> "209915" Then Rows(i).EntireRow.Delete

         Next i
     
     End If
   
  Next ws
    Set wb = Nothing


    Application.ScreenUpdating = True
    Application.DisplayStatusBar = True
    Application.EnableEvents = True
    Application.DisplayAlerts = True

 End Sub
Sub-loopanddelete()
我想我会坚持多久
将wb设置为工作簿
将ws设置为工作表
Application.DisplayAlerts=False
Application.ScreenUpdating=False
Application.DisplayStatusBar=False
Application.EnableEvents=False
设置wb=ThisWorkbook
对于wb.工作表中的每个ws
如果左(ws.Name,3)=“209”,则
对于i=ws.Range(“A10000”)。结束(xlUp)。第2行到第1步
如果左(单元格(i,1),1)“4”和左(单元格(i,1),1)“5”和左(单元格(i,1),1)“6”和左(单元格(i,1),6)ws.Name和左(单元格(i,1),6)“209915”,则行(i).EntireRow.Delete
接下来我
如果结束
下一个ws
设置wb=Nothing
Application.ScreenUpdating=True
Application.DisplayStatusBar=True
Application.EnableEvents=True
Application.DisplayAlerts=True
端接头
你能帮忙吗


提前感谢

您被困在活动工作表中,因为您对Cells()和Rows()的调用没有引用正在循环的工作表。当保留为空时,这些将引用ActiveSheet。。。这意味着它永远不会调用剩余的表单

您可以将工作表添加到这些范围对象(“ws.Cells()”、“ws.Rows()”),也可以让For循环激活现有工作表(“ws.activate”)

很可能只需将工作表添加到被引用的范围对象中即可,如下所示:

Sub loopanddelete()

   Dim i As Long
   Dim wb As Workbook
   Dim ws As Worksheet

   Application.DisplayAlerts = False
   Application.ScreenUpdating = False
   Application.DisplayStatusBar = False
   Application.EnableEvents = False

   Set wb = ThisWorkbook

   For Each ws In wb.Worksheets

      If Left(ws.Name, 3) = "209" Then
         
         For i = ws.Range("A10000").End(xlUp).Row To 2 Step -1

             If Left(ws.Cells(i, 1), 1) <> "4" And Left(ws.Cells(i, 1), 1) <> "5" And Left(ws.Cells(i, 1), 1) <> "6" And Left(ws.Cells(i, 1), 6) <> ws.Name And Left(ws.Cells(i, 1), 6) <> "209915" Then ws.Rows(i).EntireRow.Delete

         Next i
     
     End If
   
    Next ws
    
    Set wb = Nothing


    Application.ScreenUpdating = True
    Application.DisplayStatusBar = True
    Application.EnableEvents = True
    Application.DisplayAlerts = True

 End Sub
Sub-loopanddelete()
我想我会坚持多久
将wb设置为工作簿
将ws设置为工作表
Application.DisplayAlerts=False
Application.ScreenUpdating=False
Application.DisplayStatusBar=False
Application.EnableEvents=False
设置wb=ThisWorkbook
对于wb.工作表中的每个ws
如果左(ws.Name,3)=“209”,则
对于i=ws.Range(“A10000”)。结束(xlUp)。第2行到第1步
如果左(ws.Cells(i,1),1)“4”和左(ws.Cells(i,1),1)“5”和左(ws.Cells(i,1),1)“6”和左(ws.Cells(i,1),6)ws.Name和左(ws.Cells(i,1),6)“209915”,则ws.Rows(i).EntireRow.Delete
接下来我
如果结束
下一个ws
设置wb=Nothing
Application.ScreenUpdating=True
Application.DisplayStatusBar=True
Application.EnableEvents=True
Application.DisplayAlerts=True
端接头

ws.
放在所有范围对象的前面:
单元格()
范围()
行()
非常有效,谢谢