2012-04-19 38 views
6

Tôi có một chức năng vba trong excel 2010 mà tôi đã xây dựng bằng cách sử dụng trợ giúp từ những người ở đây. Hàm này sao chép nội dung của một bảng/biểu mẫu, sắp xếp chúng và gửi chúng đến các bảng thích hợp.Làm thế nào để chọn nội dung bảng rõ ràng mà không phá hủy bảng?

Bây giờ sau khi chạy chức năng này, tôi muốn xóa bảng gốc. Tôi có thể đạt được điều này với mã sau đây, giả sử ACell đã được định nghĩa là ô đầu tiên trong bảng. ACell.ListObject.Range.ClearContents hoạt động tốt, vấn đề duy nhất là nó xóa bảng cũng như các giá trị dữ liệu.

Có cách nào xung quanh vấn đề này không? Tôi không muốn thiết lập bảng mỗi khi tôi nhập một số dữ liệu.

Trả lời

17

Làm thế nào về:

ACell.ListObject.DataBodyRange.Rows.Delete 

Điều đó sẽ giữ cho cấu trúc của bạn bảng và tiêu đề, nhưng rõ ràng tất cả các dữ liệu và các hàng.

EDIT: Tôi sẽ chỉ sửa đổi một phần câu trả lời của tôi từ your previous post, vì nó chủ yếu là những gì bạn muốn. Đây lá chỉ một dòng:

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 

Nếu bạn muốn để lại tất cả các hàng còn nguyên vẹn với công thức và không có điều gì họ, chỉ cần làm:

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

Đó là gần với những gì @Readify đề nghị, ngoại trừ nó đã giành 'không rõ ràng công thức.

+1

Vì vậy, nếu tôi xóa tất cả các hàng, điều gì sẽ xảy ra? Nó sẽ để lại một trống hoặc tôi sẽ chỉ có tên là bảng không có ô, tôi không có đầu trang của chân trang trên bảng này. – SpeedCrazy

+0

Chỉ cần thử nó và điều này hoàn toàn xóa bảng, công thức, xác nhận dữ liệu, định dạng, tất cả mọi thứ! – SpeedCrazy

+0

Được rồi, hít một hơi thật sâu :). Nó sẽ giúp ích nếu bạn đề cập đến những thứ như xác thực dữ liệu và công thức trong câu hỏi của bạn. Câu hỏi trước tôi trả lời về chủ đề này bao gồm mã để rời khỏi một hàng. Đó là điều bạn muốn? –

5

Cố gắng chỉ thanh toán bù trừ các dữ liệu (không phải toàn bộ bảng bao gồm tiêu đề):

ACell.ListObject.DataBodyRange.ClearContents 
+0

Nếu bạn muốn để lại các hàng trong bảng và chỉ xóa nội dung sau đó sử dụng ở trên. Nếu bạn muốn xóa các hàng thì sử dụng câu trả lời của Doug. – Reafidy

+0

+1 để xem điều này với đôi mắt mới mẻ và đưa ra câu trả lời gần nhất về thông tin vào thời điểm đó. –

0

tôi sử dụng mã này để loại bỏ dữ liệu của tôi nhưng để lại các công thức ở hàng trên cùng. Nó cũng loại bỏ tất cả các hàng ngoại trừ hàng trên cùng và cuộn trang lên trên cùng.

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 
Các vấn đề liên quan