Excel 使用VBA宏中的某些条件删除行,但公式不';t更新

Excel 使用VBA宏中的某些条件删除行,但公式不';t更新,excel,vba,Excel,Vba,我试图使用某些条件删除VBA中的行。VBA第一次工作,但第二次使用原始值,不更新。例如,如果我使用“Sprint 37”运行代码,它将在第一次运行,但是如果我将值更改为“Sprint 38”,代码仍然会删除“Sprint 37”中的行。此外,我还希望在代码中使用用户定义的编号。任何帮助都会很好。谢谢 Sub Macro4() Worksheets("Master").Activate Range(Selection, Selection.End(xlToRight)).Select

我试图使用某些条件删除VBA中的行。VBA第一次工作,但第二次使用原始值,不更新。例如,如果我使用“Sprint 37”运行代码,它将在第一次运行,但是如果我将值更改为“Sprint 38”,代码仍然会删除“Sprint 37”中的行。此外,我还希望在代码中使用用户定义的编号。任何帮助都会很好。谢谢

Sub Macro4()

Worksheets("Master").Activate

    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    For Each Cell In Selection
        If Cell.Value = "Sprint 38" Then
            Rows(Cell.Row).ClearContents
        End If
    Next
    Selection.SpecialCells(xlCellTypeBlanks).Select
    Selection.EntireRow.Delete

End Sub

假设您的表格从单元格
A1
开始

  • 明确定义您的范围(不要依赖
    。选择
  • 在循环遍历每个单元格时,将目标行(要删除的行)添加到
    联合
    (单元格集合)
  • 循环完成后,立即删除整个
    联合
    

    如果它已经删除了行
    Sprint 37
    ,它如何再次删除它们?如果是,这可能是由于您的
    选择
    使用造成的。您的意思是删除了相同的行号吗?还不清楚“用户定义的数字”是什么意思。就像用户输入数字的输入框一样?您可以共享其他信息吗?你的桌子是什么形状的?表格是否从
    A1
    开始,第一行是标题行?这是一张二维桌子吗?样本数据可能会有所帮助。我这样问是因为与
    选择
    xlToRight
    /
    xlDown
    相比,有更好的方法来定义范围。您的代码工作正常,但您必须位于尝试处理的左上角单元格中。你能在不使用选择的情况下找到数据的第一行和最后一行吗?@Urderboy我总是在运行代码之前创建一个包含所有数据的新工作表,这样所有sprint数据都在那里。表格从A1开始,是二维的。我使用选择的唯一原因是表的大小可以由未来的用户更改。如果有更好的方法来选择数据的动态范围,那就太好了。谢谢
    Sub Jeeped()
    
    Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
    Dim lr As Long, lc As Long
    Dim iCell As Range, DeleteMe As Range
    
    lr = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
    lc = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
    
    For Each iCell In ws.Range(ws.Cells(2, 1), ws.Cells(lr, lc))
        If iCell = "Spring 37" Then
            If Not DeleteMe Is Nothing Then
                Set DeleteMe = Union(iCell, DeleteMe)
            Else
                Set DeleteMe = iCell
            End If
        End If
    Next iCell
    
    If Not DeleteMe Is Nothing Then DeleteMe.EntireRow.Delete
    
    End Sub