Excel 基于列值删除行
我有一个我以前在其他项目中使用过的代码,它按预期工作。我现在使用的代码具有不同的值。但任何包含除“工作组管理器”以外的值的行都不会被删除。我现在在Excel 2013中工作(该公司刚刚从2007年升级)。这是否会导致代码无法正常工作?我不知道Excel 2007和Excel 2013在VBA编码方面有什么区别Excel 基于列值删除行,excel,excel-2013,vba,Excel,Excel 2013,Vba,我有一个我以前在其他项目中使用过的代码,它按预期工作。我现在使用的代码具有不同的值。但任何包含除“工作组管理器”以外的值的行都不会被删除。我现在在Excel 2013中工作(该公司刚刚从2007年升级)。这是否会导致代码无法正常工作?我不知道Excel 2007和Excel 2013在VBA编码方面有什么区别 Sub Filter_WGM() Dim PTASK_Template As Workbook Set PTASK_Template = Workbooks("B
Sub Filter_WGM()
Dim PTASK_Template As Workbook
Set PTASK_Template = Workbooks("BCRS Unassigned Tasks Template.xlsm")
Dim WGMd As Worksheet
Set WGMd = PTASK_Template.Sheets("WGM")
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With WGMd
Dim LRMf As Long
For LRMf = Cells(Rows.Count, 3).End(xlUp).Row To 2 Step -1
If Cells(LRMf, 3).Value <> "WorkGroup Manager" Then
Rows(LRMf).Delete
End If
Next LRMf
End With
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Sub-Filter_WGM()
将PTASK_模板设置为工作簿
设置PTASK_Template=工作簿(“BCRS Unassigned Tasks Template.xlsm”)
将WGMd设置为工作表
设置WGMd=PTASK_模板图纸(“WGM”)
Application.ScreenUpdating=False
Application.Calculation=xlCalculationManual
与WGMd
将LRMf调暗为长
对于LRMf=单元格(Rows.Count,3)。结束(xlUp)。行到2步骤-1
如果单元格(LRMf,3)。值为“工作组管理器”,则
行(LRMf)。删除
如果结束
下一个LRMf
以
Application.ScreenUpdating=True
Application.Calculation=xlCalculationAutomatic
端接头
我需要用不同的值重复这段代码,以便在我为这张工作表工作后在另外两张工作表上工作。尝试一下这段代码,正如我建议的那样,我使用了with语句,并重新编译了一些代码,以便于阅读
Sub Filter_WGM()
Dim PTASK_Template As Workbook
Dim WGMd As Worksheet
Dim LRMf As Long
Set PTASK_Template = Workbooks("BCRS Unassigned Tasks Template.xlsm")
Set WGMd = PTASK_Template.Sheets("WGM")
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With WGMd
For LRMf = .Cells(.Rows.Count, 3).End(xlUp).Row To 2 Step -1
If .Cells(LRMf, 3).Value <> "WorkGroup Manager" Then
.Rows(LRMf).Delete
End If
Next LRMf
End With
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Sub-Filter_WGM()
将PTASK_模板设置为工作簿
将WGMd设置为工作表
将LRMf调暗为长
设置PTASK_Template=工作簿(“BCRS Unassigned Tasks Template.xlsm”)
设置WGMd=PTASK_模板图纸(“WGM”)
Application.ScreenUpdating=False
Application.Calculation=xlCalculationManual
与WGMd
对于LRMf=.Cells(.Rows.Count,3).End(xlUp).Row到2步骤-1
如果.Cells(LRMf,3).Value为“工作组管理器”,则
.行(LRMf).删除
如果结束
下一个LRMf
以
Application.ScreenUpdating=True
Application.Calculation=xlCalculationAutomatic
端接头
此外,如果您打算在不同的工作表上使用它,并查找不同的值,您可以尝试以下方法。然后,您可以启动此子系统并将相关参数传递给它。(请注意,此代码未经测试)
Sub-DeleteRowsFromSheet(TargetSheet作为工作表,ValueColumn作为整数,Value作为字符串)
将MyRow设置为整数
有目标表
对于MyRow=2到.Cells(.Rows.Count,ValueColumn).End(XlUp).Row
If.Cells(MyRow,ValueColumn).Value然后
.Row(MyRow).EntireRow.Delete
MyRow=MyRow-1
如果结束
下一个
以
端接头
如果要将与
一起使用,请在单元格前添加一个
。编辑:或实际上是所有工作表对象。@findwindow两个?全部。包括行
。如果您要使用它,请用
查找。@findwindow谢谢,就这样做了。我会按照你的建议做更多关于使用With的研究。谢谢你的帮助。
Sub DeleteRowsFromSheet(TargetSheet As Worksheet, ValueColumn As Integer, Value As String)
Dim MyRow As Integer
With TargetSheet
For MyRow = 2 To .Cells(.Rows.Count,ValueColumn).End(XlUp).Row
If .Cells(MyRow,ValueColumn).Value <> Value Then
.Row(MyRow).EntireRow.Delete
MyRow = MyRow - 1
End If
Next
End With
End Sub