【问题标题】:Deleting rows using some condition in VBA Macro but the formula doesn't update在 VBA 宏中使用某些条件删除行但公式不更新
【发布时间】:2019-09-30 16:23:46
【问题描述】:

我正在尝试使用某些条件删除 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

【问题讨论】:

  • 如果它已经删除了行Sprint 37,它如何再次删除它们?如果是这样,这可能是由于您的Selection 使用了您的意思是删除了相同的行号吗?还不清楚“用户定义的数字”是什么意思。像一个供用户输入数字的输入框?
  • 你能分享其他信息吗?你的桌子是什么形状的?表格是否从A1 开始,第一行是标题行?是二维表吗?样本数据可能会有所帮助。我问是因为与 SelectionxlToRight/xlDown 相比,有更好的方法来定义范围
  • 您的代码工作正常,但您必须位于您要处理的最左上角的单元格中。你能不使用选择找到数据的第一行和最后一行吗?
  • @urdearboy 我总是在运行代码之前创建一个包含所有数据的新工作表,以便所有 sprint 数据都在那里。该表从 A1 开始并且是二维的。我使用选择的唯一原因是表的大小可以由未来的用户更改。如果有更好的方法来选择数据的动态范围,那就太好了。谢谢。

标签: excel vba


【解决方案1】:

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

  1. 明确定义您的范围(不要依赖.Selection
  2. 在循环遍历每个单元格时,将目标行(要删除的行)添加到Union单元格集合
  3. 循环完成后,一次性删除整个Union

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多