查找单个工作表的大小(Microsoft Excel)
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的较旧菜单界面中找到此技巧的版本: