2017-06-16 101 views
1

我在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行,我无法直观地看到?

感谢您的帮助,我很感激

+0

可以肯定的是,由于代码看起来很好,你确定'tot_rows'设置正确。你可以在你的'With'行上放置一个断点(F9),运行代码并在你的本地窗口(Use view >> Locals)中检查'tot_rows'的值,如果你没有在VBE中。 – JNevill

+0

或者您可以在确定最后一行之后在一行代码中完成......'Sheets(“Name”)。Range(“A2:Z”&tot_rows).Delete' – braX

+0

您的'End With' ? – dwirony

回答

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 
+0

那么,您最后的代码给了我相同的答案:没有任何反应。 –

+0

我确定你的代码是完美的,我真诚地不知道该怎么办 –

+0

工作表/工作簿是受保护的吗? – Jeeped