2012-04-19 97 views
6

我在excel 2010中有一個vba函數,我使用這裏的人的幫助來構建。該函數複製表格/表格的內容,對它們進行排序,並將它們發送到適當的表格。如何選擇清除表格內容而不破壞表格?

現在運行此功能後,我想清除原始表。我可以用下面的代碼實現這一點,假設ACell被定義爲表中的第一個單元格。 ACell.ListObject.Range.ClearContents工作正常,唯一的問題是它刪除表以及數據值。

有沒有解決這個辦法嗎?每次輸入數據時,我寧願不必設置表格。

回答

17

如何:

ACell.ListObject.DataBodyRange.Rows.Delete 

,將讓您的表結構和標題,但清除所有數據和行。

編輯:我打算只修改我的答案的一部分從your previous post,因爲它主要是你想要的。這使得只有一行:

With loSource 
    .Range.AutoFilter 
    .DataBodyRange.Offset(1).Resize(.DataBodyRange.Rows.Count - 1,      .DataBodyRange.Columns.Count).Rows.Delete 
    .DataBodyRange.Rows(1).Specialcells(xlCellTypeConstants).ClearContents 
End With 

如果你想留下所有的行完整與他們的公式和諸如此類的東西,只是做:

With loSource 
    .Range.AutoFilter 
    .DataBodyRange.Specialcells(xlCellTypeConstants).ClearContents 
End With 

,接近到什麼@Readify建議,但它贏得了沒有明確的公式。

+1

所以,如果我刪除所有行會發生什麼?它會留下1空白的一個,或者我只是沒有單元格命名錶,我沒有頁腳在這張桌子上。 – SpeedCrazy 2012-04-19 03:31:33

+0

只是試了一下,這完全刪除了表,公式,數據驗證,格式化,一切! – SpeedCrazy 2012-04-19 03:33:45

+0

好的,深吸一口氣:)。如果你在你的問題中提到了諸如數據驗證和公式之類的東西,這將有所幫助我在這個主題上回答的前一個問題包括留下一行的代碼。那是你要的嗎? – 2012-04-19 03:41:19

5

儘量只清除數據(而不是整個表,包括標題):

ACell.ListObject.DataBodyRange.ClearContents 
+0

如果您想離開表格行並清除內容,請使用上面的。如果你想刪除這些行,那麼使用Doug的答案。 – Reafidy 2012-04-19 03:16:54

+0

+ 1用新鮮的眼睛看到這一點,並給出當時信息的最接近的答案。 – 2012-04-19 13:52:50

0

我使用此代碼刪除我的數據,但離開公式上面一行。它還刪除除頂行外的所有行,並將頁面滾動到頂部。

Sub CleanTheTable() 
    Application.ScreenUpdating = False 
    Sheets("Data").Select 
    ActiveSheet.ListObjects("TestTable").HeaderRowRange.Select 
    'Remove the filters if one exists. 
    If ActiveSheet.FilterMode Then 
    Selection.AutoFilter 
    End If 
    'Clear all lines but the first one in the table leaving formulas for the next go round. 
    With Worksheets("Data").ListObjects("TestTable") 
    .Range.AutoFilter 
    On Error Resume Next 
    .DataBodyRange.Offset(1).Resize(.DataBodyRange.Rows.Count - 1, .DataBodyRange.Columns.Count).Rows.Delete 
    .DataBodyRange.Rows(1).SpecialCells(xlCellTypeConstants).ClearContents 
    ActiveWindow.SmallScroll Down:=-10000 

    End With 
Application.ScreenUpdating = True 
End Sub