在VBA中检测工作表类型(Microsoft Excel)
如果要编写在工作簿中处理不同工作表的宏,则可能需要先进行工作处理,然后再确定工作簿中存在哪些类型的工作表。这一点特别重要,因为某些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的较早菜单界面找到此技巧的版本: