.UsedRange大于预期

时间:2018-01-05 12:33:38

标签: excel excel-vba vba

我有一张用于写入数据的工作表,在此之前首先需要清空数据。

该工作表有一个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部分而非{ {1}}正如我所料。 Exit Sub评估为.UsedRange而不是预期的A1:NQY6

要查找此范围内是否有任何数据不在我运行的标题范围内:

A1:NQY3

当我运行时,弹出的消息框没有显示,表示该范围内没有数据。为什么当我删除一个范围时,根据UsedRange维度,使用的范围是否大于预期?

1 个答案:

答案 0 :(得分:0)

如何用以下内容替换代码,这将删除下面的所有行,包括第4行:

anotherDict = {
      'user1':  [842.86917819535, 25.58264089252],
      'user2':  [706.92644963185, 27.22746146366],
      'user3':  [696.60346488317, 25.67540525994],
}

我不确定为什么使用范围会有所不同,我倾向于不依赖它而只是明确地删除某些内容,希望这会有所帮助。