【问题标题】:Excel VBA to delete blank rows within a rangeExcel VBA删除范围内的空白行
【发布时间】:2017-02-15 07:18:52
【问题描述】:

我的工作表的数据从 A84 开始,延伸到 X 列。我使用此 VBA 选择整个数据范围。

Dim Lastrow As Integer
Lastrow = Range("A:Z").Find("*", , , , xlByRows, xlPrevious).Row

Range("A84:X" & Lastrow).Select

在该选定范围内,我需要它来检测从 A 列到 Z 列的哪些行是空白的并删除它们。如果 Z 列之后有数据,则应该删除该行,因为我认为它是空白的。

【问题讨论】:

  • 向后循环遍历范围行:For i = Lastrow to 84 step -1 然后:If Application.WorkSheetFormula.CountA(Range(Cells(i,1),Cells(i,26)))=0 Then Rows(i).Delete
  • @ScottCraner 对不起。我可能做错了什么,但运行时出现语法错误。
  • 错误在哪一行?
  • 它只是说If Application.WorkSheetFormula.CountA(Range(Cells(i,1),Cells(i??,26)))=0 Then Rows(i).Delete的“编译错误:语法错误”

标签: vba excel


【解决方案1】:

cmets 有时会添加字符。代码如下:

Dim Lastrow As Integer
Lastrow = Range("A:Z").Find("*", , , , xlByRows, xlPrevious).Row


For i = Lastrow To 84 Step -1
    If Application.CountA(Range(Cells(i, 1), Cells(i, 26))) = 0 Then Rows(i).Delete
Next i

【讨论】:

  • 现在我收到此错误:运行时错误“438”:对象不支持此属性或方法。这就是突出显示的内容:If Application.WorkSheetFormula.CountA(Range(Cells(i, 1), Cells(i, 26))) = 0 Then
  • 等等。应该是 Application.WorkSheetFunction 而不是 ApplicationWorkSheetFormula?我做了那个改变,它起作用了。
  • @Robby 这就是我在答案中输入的结果。是的,或者像上面的编辑。完全删除 WorkSheetFunction 部分。
  • @Robby 记得通过单击答案旁边的复选标记将其标记为正确。
  • 在对此进行了更多测试后,我在使用 Excel 2010 时遇到了一个问题:如果我在运行此代码时看到空白行,它总是会删除该行。但是如果在运行代码时空白行不在视图中,有时它不会删除该行。相反,它只是从灰色单元格中删除了行号,我认为这很奇怪。我通过在倒数第二行包含 WorkSheetFunction 位解决了这个错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-02
  • 2018-08-09
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多