2016-02-21 287 views
0

我一直在使用此代碼來定義包含數據的範圍的變量。然後,我嘗試用它來清除工作表(不包括標題),但它始終顯示最後一行是A2,例如,在範圍W4中存在來自先前粘貼的「重影」數據時。VBA Excel代碼不刪除「空白」單元格

爲什麼這段代碼找不到真正的最後一行?即使我運行這個,然後去查找特殊>最後一行 - 它找到最後粘貼的空白範圍(這是「空」)。你可以看到變量LastRow總是「1」。同時,我剛剛將刪除範圍設置爲A2:W5000,因爲我知道我永遠不會擁有那麼多的數據,但是如果讓VBA找到真正的最後一行並將其存儲在變量中。 謝謝

Public Sub ClearSheet() 
Dim LastRow As Long 
Dim LastCol As Long 
If WorksheetFunction.CountA(Cells) > 0 Then 
LastRow = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows,   SearchDirection:=xlPrevious).Row 
LastCol = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns,  SearchDirection:=xlPrevious).Column 
     MsgBox (LastRow) 
     MsgBox (LastCol) 
Range("A2").Resize(LastRow, LastCol).EntireRow.Delete 'retains headers in A1:W1 
+0

我找不出這個編輯器以及如何格式化代碼! – purplefolder

+0

http://stackoverflow.com/posts/35532472/edit – 0m3r

+0

爲什麼不只是'範圍(「A2:CC1040000」)。ClearContents' –

回答

0

嘗試使用UsedRange函數。 UsedRange包含「鬼影」單元格,您可以操作它以刪除不需要的行,不包括標題,如下所示:

Sub RemoveUnwantedRows() 

    Dim wk As Worksheet 
    Set wk = ActiveSheet 

    Dim rng As Range 

    Set rng = wk.UsedRange 
    'Error handling incase there are no "Ghost Cells". 
    On Error Resume Next 
    Set rng = rng.Resize(rng.Rows.Count - 1, rng.Columns.Count) 
    Set rng = rng.Offset(1, 0) 
    rng.Rows.Delete 
    On Error GoTo 0 
    'Proof that only the headers are left, you can leave this code out if you want. 
    wk.UsedRange.Select 

End Sub 
相關問題