Maarten tự hỏi liệu có cách nào để tìm ra kích thước của mỗi trang tính trong sổ làm việc không. Anh ta có một sổ làm việc với gần 100 trang tính và anh ta muốn giảm kích thước của tệp sổ làm việc. Tuy nhiên, anh ấy không biết trang tính nào có kích thước lớn nhất.

Việc tìm ra “kích thước” của từng trang tính phụ thuộc phần lớn vào ý nghĩa của “kích thước”. Nó có nghĩa là số lượng ô được sử dụng? Các cột và hàng được sử dụng? Bao nhiêu văn bản được lưu trữ trong trang tính? Danh sách các số liệu có thể tiếp tục lặp lại.

Vấn đề là những câu hỏi như thế này sai dấu; một trang tính có thể có rất nhiều mục được lưu trữ trên đó. Ví dụ, nó có thể chứa nhận xét, công thức, văn bản, biểu đồ, tệp âm thanh và bất kỳ số lượng mục nào khác. Một biểu đồ có thể lớn hơn biểu đồ khác về số lượng ô, nhưng biểu đồ kia có thể lớn hơn về đối tượng (chẳng hạn như biểu đồ hoặc PivotTable).

Cách thực sự duy nhất để so sánh kích thước tương đối của các trang tính là lưu từng trang tính vào sổ làm việc của chính nó và sau đó kiểm tra kích thước của từng sổ làm việc kết quả. Điều này rõ ràng không trả lời chính xác kích thước của từng trang tính riêng lẻ vì hành động lưu sổ làm việc đưa thêm chi phí vào tệp đã lưu. Tuy nhiên, nếu mỗi trang tính được lưu theo cùng một cách, mỗi trang sẽ có chi phí tương đương và do đó có thể so sánh với nhau để xem cái nào lớn hơn.

Macro sau đây thêm một trang tính vào sổ làm việc hiện tại để ghi lại kích thước của từng sổ làm việc được tạo. Sau đó, nó bước qua từng trang tính và lưu nó vào một sổ làm việc riêng lẻ. Kích thước của sổ làm việc sau đó được xác định, ghi lại và xóa sổ làm việc mới.

Sub WorksheetSizes()

Dim wks As Worksheet     Dim c As Range     Dim sFullFile As String     Dim sReport As String     Dim sWBName As String

sReport = "Size Report"

sWBName = "Erase Me.xls"

sFullFile = ThisWorkbook.Path & _       Application.PathSeparator & sWBName

' Add new worksheet to record sizes     On Error Resume Next     Set wks = Worksheets(sReport)

If wks Is Nothing Then         With ThisWorkbook.Worksheets.Add(Before:=Worksheets(1))

.Name = sReport             .Range("A1").Value = "Worksheet Name"

.Range("B1").Value = "Approximate Size"

End With     End If     On Error GoTo 0     With ThisWorkbook.Worksheets(sReport)

.Select         .Range("A1").CurrentRegion.Offset(1, 0).ClearContents         Set c = .Range("A2")

End With

Application.ScreenUpdating = False     ' Loop through worksheets     For Each wks In ActiveWorkbook.Worksheets         If wks.Name <> sReport Then             wks.Copy             Application.DisplayAlerts = False             ActiveWorkbook.SaveAs sFullFile             ActiveWorkbook.Close SaveChanges:=False             Application.DisplayAlerts = True             c.Offset(0, 0).Value = wks.Name             c.Offset(0, 1).Value = FileLen(sFullFile)

Set c = c.Offset(1, 0)

Kill sFullFile         End If     Next wks     Application.ScreenUpdating = True End Sub

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (11113) áp dụng cho Microsoft Excel 2007 và 2010. Bạn có thể tìm phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: