除第一个之外完全删除行

时间:2017-06-16 12:40:43

标签: excel vba rows

我正在努力使用Excel中的Visual Basic来完全删除工作表中除前六行之外的所有行。 这里我说明了与命令按钮相关的代码:

Dim i As Integer
Dim tot_rows As Integer

tot_rows = ThisWorkbook.Sheets("NAME").UsedRange.Rows.Count
With Worksheets("NAME")

For i = tot_rows To 6 Step -1
        .Rows(i).ClearContents
        .Rows(i).EntireRow.Delete
Next i

当我执行代码时,它没有删除任何一行,你能告诉我为什么吗? tot_rows总是等于401(在表格中我可以看到401行,所以我认为它是正确的)。 可能超过401行,我无法直观地看到它?

感谢您的帮助,我感谢

1 个答案:

答案 0 :(得分:0)

.UsedRange可以松鼠;特别是当您的数据不在从第1行扩展的连续块中时。

dim lr as long, lc as long

with worksheets("sheet1")
    lr = .cells.Find(What:="*", After:=.Cells(1), LookIn:=xlFormulas, LookAt:=xlWhole, _
               SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row
    lc = .cells.Find(What:="*", After:=.Cells(1), LookIn:=xlFormulas, LookAt:=xlWhole, _
               SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).column
    .range(.cells(7, 1), .cells(lr, lc)).clear
end with

如果您要“删除”所有行,则只需将其清除为块。没有循环;没有删除。

出于所有意图和目的,没有理由认为这不会做你正在尝试的事情。

with worksheets("sheet1")
    .range(.cells(7, 1), .cells(.rows.count, .columns.count)).clear
end with