Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 基于列值删除行_Excel_Excel 2013_Vba - Fatal编程技术网

Excel 基于列值删除行

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

我有一个我以前在其他项目中使用过的代码,它按预期工作。我现在使用的代码具有不同的值。但任何包含除“工作组管理器”以外的值的行都不会被删除。我现在在Excel 2013中工作(该公司刚刚从2007年升级)。这是否会导致代码无法正常工作?我不知道Excel 2007和Excel 2013在VBA编码方面有什么区别

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