如果要编写在工作簿中处理不同工作表的宏,则可能需要先进行工作处理,然后再确定工作簿中存在哪些类型的工作表。这一点特别重要,因为某些VBA命令仅适用于某些类型的工作表。

在弄清楚工作簿中有哪些类型的工作表之前,了解Excel如何在内部存储构成工作簿的某些对象会很有帮助。 Excel维护一个工作表集合和一个图表集合。工作表集合由工作表对象组成,图表集合由图表工作表对象组成。

图表工作表对象是那些占据整个工作表的图表;它不包括那些嵌入在工作表中的对象。

有趣的是,工作表和图表工作表对象也是Sheets集合的成员。因此,如果要按工作表出现的顺序处理工作簿,则最简单的方法是逐步完成“工作表”集合。这样做时,您可以检查集合中单个对象的Type属性,以确定它是什么类型的对象。 Excel定义了两种可以属于Sheets集合的对象:

xlWorksheet。*这是一个常规工作表。

xlChart。*这是一张图表。

Microsoft Excel仍然支持以下两种类型的对象,但是Microsoft建议您将它们迁移到最新版本的Microsoft VBA。 (有关使用Excel 4.0宏的更多信息,请参见下面列出的网页。):

xlExcel4MacroSheet。*这是宏表,如在Excel 4.0中所使用。

xlExcel4IntlMacroSheet。*这是国际宏表,在Excel 4.0中使用。

https://support.office.com/en-us/article/Working-with-Excel-4-0-macros-BA8924D4-E157-4BB2-8D76-2C07FF02E0B8

您可能会以为只查看图纸类型列表就足够了。但是,有趣的是,Excel并不总是返回您对Type属性的期望。相反,如果您检查图表的Type属性,它将返回一个等于xlExcel4MacroSheet的值。

这可能会导致任何宏出现问题。

因此,解决方法是将Sheets集合中每个项目的名称与Charts集合中的每个项目的名称进行比较。如果名称在两个集合中都存在,则可以安全地认为工作表是图表。如果两者都不存在,则可以进一步分析以查看工作表是否为其他类型之一。下面的宏SheetType完全遵循此过程:

Sub SheetType()

Dim iCount As Integer     Dim iType As Integer     Dim sTemp As String     Dim oChart As Chart     Dim bFound As Boolean

sTemp = ""

For iCount = 1 To Sheets.Count         iType = Sheets(iCount).Type         sTemp = sTemp & Sheets(iCount).Name & " is a"



bFound = False         For Each oChart In Charts             If oChart.Name = Sheets(iCount).Name Then                 bFound = True             End If         Next oChart

If bFound Then             sTemp = sTemp & " chart sheet."

Else             Select Case iType                 Case xlWorksheet                     sTemp = sTemp & " worksheet."

Case xlChart                     sTemp = sTemp & " chart sheet."

Case xlExcel4MacroSheet                     sTemp = sTemp & "n Excel 4 macro sheet."

Case xlExcel4IntlMacroSheet                     sTemp = sTemp & "n Excel 4 international macro sheet"

Case Else                     sTemp = sTemp & "n unknown type of sheet."

End Select         End If         sTemp = sTemp & vbCrLf     Next iCount     MsgBox sTemp End Sub

运行宏时,您会看到一个消息框,其中显示工作簿中每个工作表的名称以及工作表的类型。

最后,请记住该代码告诉您工作簿中的工作表类型。它不会告诉您它们包含在哪种类型的工作簿中。(换句话说,宏并不关心您正在使用的Excel版本。)

注意:

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

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

本技巧(10483)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处为Excel的较早菜单界面找到此技巧的版本: