【问题标题】:VBA Excel code not deleting "blank" cellsVBA Excel代码不删除“空白”单元格
【发布时间】:2016-02-21 04:53:20
【问题描述】:

我一直在使用这段代码来定义一个包含数据的范围的变量。然后我尝试使用它来清除工作表(减去标题),但它一直显示最后一行是 A2,例如,当 W4 范围内的先前粘贴中存在“幽灵”数据时。

为什么这段代码没有找到真正的最后一行?即使在我运行它之后,然后转到 Find Special > Last Row - 它会找到最后粘贴的空白范围(即“空”)。您可以看到变量 LastRow 始终为“1”。同时,我刚刚将删除范围设置为 A2:W5000 因为我知道我永远不会有那么多数据,但是让 VBA 为我找到真正的最后一行并将其存储在一个变量中会很好. 谢谢,

Public Sub ClearSheet()
Dim LastRow As Long
Dim LastCol As Long
If WorksheetFunction.CountA(Cells) > 0 Then
LastRow = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows,         SearchDirection:=xlPrevious).Row
LastCol = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns,     SearchDirection:=xlPrevious).Column
        MsgBox (LastRow)
        MsgBox (LastCol)
Range("A2").Resize(LastRow, LastCol).EntireRow.Delete 'retains headers in A1:W1

【问题讨论】:

  • 我无法弄清楚这个编辑器以及如何格式化代码!
  • 为什么不只是Range("A2:CC1040000").ClearContents
  • 必须真正删除行,因为这些数据随后会被导出到另一个古老程序读取的工作表中。如果有幽灵单元格,它会计算它们并尝试使用这些行,即使实际上没有任何内容(并引发错误)。
  • 好的,Range("A2:A1040000").EntireRow.Delete

标签: vba excel


【解决方案1】:

试试 UsedRange 函数。 UsedRange 包括“幽灵”单元格,您可以对其进行操作以删除不需要的行,不包括标题,如下所示:

Sub RemoveUnwantedRows()

    Dim wk As Worksheet
    Set wk = ActiveSheet

    Dim rng As Range

    Set rng = wk.UsedRange
    'Error handling incase there are no "Ghost Cells".
    On Error Resume Next
    Set rng = rng.Resize(rng.Rows.Count - 1, rng.Columns.Count)
    Set rng = rng.Offset(1, 0)
    rng.Rows.Delete
    On Error GoTo 0
    'Proof that only the headers are left, you can leave this code out if you want.
    wk.UsedRange.Select

End Sub

【讨论】:

    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多