【问题标题】:Clear Macro to clear specific range of cells on Blank cell in certain column清除宏以清除特定列中空白单元格上的特定单元格范围
【发布时间】:2016-10-28 17:36:21
【问题描述】:

我昨天要求similar question 填充特定列列表中的一系列单元格。我的代码的这方面运行良好,但现在我正在尝试创建一个清晰的宏来删除插入的行。

所有新插入的行都将在 N 列中有空白单元格,所以我只是尝试搜索 N 列中的所有单元格,找到空白,然后删除 N 和 Y 列之间的行。这就是我所拥有的很远,但是当我运行它时它什么也没做?

非常感谢任何帮助!

Sub Clear_PCOTCS()
    Dim myLastRow As Long
    Dim myRow As Long

    Application.ScreenUpdating = False
    myLastRow = Cells(Rows.Count, "N").End(xlUp).Row
    For myRow = myLastRow To 1 Step -1
        If Len(Cells(myRow, "N")) = 1 And Cells(myRow, "N") = "" Then
            Range(Cells(myRow + 1, "N"), Cells(myRow + 1, "Y")).Delete  Shift:=xlDown 'CopyOrigin:=xlFormatFromLeftOrAbove
        End If
    Next myRow
    Application.ScreenUpdating = True
End Sub

【问题讨论】:

  • “N”单元格中的值的长度不能为 1 并且为空。你在那一行测试什么?
  • 谢谢,我完全错过了。我已将该行代码更新为 If Cells(myRow, "N") = "" Then 但现在我在它下面的下一行出现错误
  • Shift:=xlDown 可能是您遇到错误的原因,那段代码在那里没有做任何事情。
  • 你在那条线上收到什么错误信息?
  • 所以,我有点模糊。为什么要测试myRow,然后删除范围myRow+1?

标签: excel vba


【解决方案1】:

您的错误来自将错误的枚举传递给Range.Delete。它需要一个XlDeleteShiftDirection 值,而您传递给它的是一个XlDirection。请注意,虽然xlShiftUpxlUp 共享相同的值,但xlDown (-4121) 不是有效的XlDeleteShiftDirection

如果您需要做的只是在“N”列中的单元格为空时删除每一行(在“N”列和“Y”列之间),那您就想多了。首先,根据您要删除的Range 的形状,shift 应该默认为xlShiftUp,因此您可以简单地省略该参数。其次,您需要删除您在此处应用的偏移量:

Range(Cells(myRow + 1, "N"), Cells(myRow + 1, "Y")).Delete

删除您正在测试的行,而不是其下方的行。您应该寻找更像这样的东西:

Sub Clear_PCOTCS()
    Dim myLastRow As Long
    Dim myRow As Long

    Application.ScreenUpdating = False
    myLastRow = Cells(Rows.Count, 14).End(xlUp).Row
    For myRow = myLastRow To 1 Step -1
        If Cells(myRow, 14).Value = vbNullString Then
            Range(Cells(myRow, 14), Cells(myRow, 25)).Delete
        End If
    Next myRow
    Application.ScreenUpdating = True
End Sub

【讨论】:

  • 感谢您,抱歉回复晚了。这非常有效,但不幸的是,它也删除了我在该范围内的单元格中的公式。有没有办法只删除具有空白 N 单元格值的行,而不是那些已保存公式的行?
  • @B.Price - 您的意思是第 N 列中的单元格具有返回空字符串的公式,还是只有 所有 列为空的行?
  • 对不起,好的,所以在我运行任何宏之前,N10:R500 的单元格区域在每个单元格中都有一个公式,用于填充数据,因为它是在工作表的其他地方输入的。然后我有一个宏,它将在列 N 和 R 之间输入新行。我的 clear 宏试图只清除那些添加的行,而不是其中包含公式的其他空行,实质上是在使用两个宏之前将工作表恢复到其状态。这就是为什么我的 clear 宏中有 ShiftUp 逻辑
  • 我可以使用的另一种方法是清除除公式之外的整个范围?这可能吗?
  • @B.Price - 在您运行宏之前工作表如何达到其所处的状态无关紧要。如果您只想删除 N 列中没有公式值的行,请将If Cells(myRow, 14).Value = vbNullString Then 行更改为If IsEmpty(Cells(myRow, 14)) Then
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
相关资源
最近更新 更多