Excel VBA循环并删除条件下的行
我希望你能帮我写代码 我已经挣扎了很长一段时间了 因此,我们的想法是遍历所有以“209”开头的工作表,然后在A列中删除所有行,除非单元格以4、5或6开头,如果它等于工作表名称,如果它等于209915 问题是,即使我选择了工作簿,我也必须进入每个工作表并运行它,否则它只运行第一个工作表 以下是我编写的代码: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
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.
放在所有范围对象的前面:单元格()
和范围()
和行()
非常有效,谢谢