【发布时间】: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