2017-06-16 144 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