Maarten想知道是否有办法找出工作簿中每个工作表的大小。他的工作簿包含近100个工作表,并且他希望减小工作簿文件的大小。但是,他不知道哪些工作表是最大的工作表。

弄清楚各个工作表的“大小”在很大程度上取决于“大小”的含义。这是否意味着使用的电池数量?使用的列和行?工作表中存储了多少文本?指标列表可能会持续不断。

问题是诸如此类的问题没有达到目标。工作表上可以存储许多项目。例如,它可以包含注释,公式,文本,图表,声音文件以及任意数量的其他项目。就单元格的数量而言,一个图表可能比另一个图表大,但就对象(例如图表或数据透视表)而言,另一个图表可能更大。

比较工作表相对大小的唯一真实方法是将每个工作表保存到自己的工作簿中,然后检查每个结果工作簿的大小。显然,这并不能精确地回答每个工作表的大小,因为保存工作簿的操作将额外的开销引入到保存的文件中。但是,如果以相同的方式保存每个工作表,则每个工作表将具有可比较的开销,因此可以相互比较以查看哪个更大。

下面的宏将工作表添加到当前工作簿中,以便记录创建的每个工作簿的大小。然后,它逐步浏览每个工作表并将其保存到单独的工作簿中。然后确定,记录工作簿的大小,并删除新的工作簿。

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

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(11113)适用于Microsoft Excel 2007和2010。您可以在下面的Excel的较旧菜单界面中找到此技巧的版本: