我有一张用于写入数据的工作表,在此之前首先需要清空数据。
该工作表有一个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维度,使用的范围是否大于预期?
答案 0 :(得分:0)
如何用以下内容替换代码,这将删除下面的所有行,包括第4行:
anotherDict = {
'user1': [842.86917819535, 25.58264089252],
'user2': [706.92644963185, 27.22746146366],
'user3': [696.60346488317, 25.67540525994],
}
我不确定为什么使用范围会有所不同,我倾向于不依赖它而只是明确地删除某些内容,希望这会有所帮助。