我有一个数据写入的工作表,在发生这种情况之前,首先需要清空它。
工作表有一个3行厚的标题,位于工作表上
A1:NQY3
但可能延伸到
A1:NVU3
我选择的清空工作表的方法是:
Set ws = ThisWorkbook.Worksheets("Sheet1")
With ws
.Range(.cells(4, 1), .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Delete
End With
上述过程工作正常,所有数据、格式和数据验证规则都已取消。当我在空工作表上再次运行该过程时,就会出现问题。然后,该过程将删除第三个标题行,作为
.UsedRange.Rows.Count
应计算为3,要删除的范围将为
.Range(.Cells(4, 1), .Cells(3, 9931))
(NQY为第9931列)
为了避免这种情况,我添加了一个检查:
Set ws = ThisWorkbook.Worksheets("Sheet1")
With ws
If .UsedRange.Rows.Count = 3 Then Exit Sub
.Range(.cells(4, 1), .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Delete
End With
当我在一张刚刚被第一道工序清空的纸上检查这一点时,我检查了
.UsedRange
评估至,因为程序已步至
.Delete
程序的一部分,而不是
Exit Sub
正如我所料。这个
.UsedRange公司
评估对象
A1:NQY6
而不是预期的
A1:NQY3
要查找此范围内是否有任何数据不在标题范围内,我运行了:
For Each cl In .UsedRange
If Not cl = Empty And cl.Row > 3 Then
MsgBox "Data found in " & cl.Address & "."
End If
Next
当我运行此操作时,没有弹出消息框,向我指示该范围内没有数据。为什么当我根据UsedRange维度删除一个范围时,使用的范围比预期的要大?