【问题标题】:VBA that selects specific range of cells and deletes only the highlighted cells and shifts up选择特定范围的单元格并仅删除突出显示的单元格并向上移动的 VBA
【发布时间】:2021-09-29 17:23:10
【问题描述】:

我是使用 VBA 的新手。我正在创建一个宏,它扫描一个范围内的每个单元格,以检测任何填充黄色的单元格,删除它们,然后向上移动。然后它应该移动到数据表中的下一个单元格。

我收到“运行时错误'1004':Range 类的删除方法失败”,我认为这是关于我声明的 Range 对象,但我不确定我应该如何正确实现它或者是否有执行此 VBA 的更好方法?这是我目前所拥有的。

Sub DeleteHighlight()
Dim cell As Range
For Each cell In Range("A6:O3863")
    If ActiveCell.Interior.Color <> RGB(255,255,0) Then
       ActiveCell.Delete Shift:=x1ToUp
       Exit For
    End If
Next cell
End Sub

【问题讨论】:

  • Cell 不是 ActiveCellxlToUp 不是 x1ToUp。此外,您将跳过单元格,因为您正在向下迭代和向上移动。
  • .Color &lt;&gt; RGB(255,255,0) 是一个非黄色单元格。

标签: excel vba


【解决方案1】:

@Warcupine 是正确的,您最终会跳过行。相反,您应该从底部循环到顶部。

Sub DeleteHighlight()

Dim lRow As Long

'find last row
lRow = Range("A1").CurrentRegion.Rows.Count

'loop backwards
For i = lRow To 1 Step -1
If Cells(i, 1).Interior.Color = RGB(255, 255, 0) Then
Rows(i).Delete
End If
Next

End Sub

【讨论】:

  • 非常感谢您对 VBA 的反馈。您的代码帮助解决了我的目标!
  • 很高兴听到这个消息!请考虑接受我的回答。
【解决方案2】:

向上扫描以避免错过已删除单元格下方的单元格。 (未经测试)

Sub DeleteHighlight()
    Dim r as Long, c as Long
    For r = 3863 to 6 Step -1
        For c = 1 To 15 'O
            If Cells(r,c).Interior.Color = RGB(255,255,0) Then
                Cells(r,c).Delete Shift:=xlToUp
            End If
        Next
    Next
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    相关资源
    最近更新 更多