查找包含宏的工作簿(Microsoft Excel)
与许多其他公司一样,Richard的公司也大量使用Excel。实际上,这些年来,他们已经收集了成千上万的Excel工作簿。 Richard需要一种方法来找出其中哪些工作簿中包含VBA宏,而无需单独打开和检查每个工作簿。他想知道是否有简单的方法可以做到这一点。
查找所有包含宏的工作簿的一种相当简单的方法是仅查找使用XLSM或XLSB扩展名的任何文件。
包含宏的工作簿必须使用这些扩展名存储在文件中。虽然不是100%可靠,但这是一个很好的起点。
您还可以使用Windows的搜索功能(在Excel之外)
并搜索任何包含文本“ End Sub”或“ End Function”的文件。因为任何VBA过程都必须在其末尾使用这两个语句之一,所以这将迅速识别出任何潜在的候选工作簿。
如果使用的是旧工作簿(使用Excel 2003的文件格式开发的工作簿),则实际上需要查看每个工作簿的内部。这可以通过编程方式完成,这意味着您可以拥有一个宏,该宏可以打开文件夹中的每个工作簿,并对其进行检查以查看其中是否包含任何宏。
例如,您可以创建一个宏,以逐步浏览目录中的每个文件,并确定该文件是否为Excel工作簿。然后,它可以打开文件并检查其中是否包含VBA项目。
Sub FindMacros() Dim sPath As String Dim sFile As String Dim sFoundFiles As String 'specify directory to use - must end in "\" sPath = "C:\MyData\Excel Data\" sFile = Dir(sPath) Do While sFile <> "" If InStr(sFile, ".xls") > 0 Then Workbooks.Open (sPath & sFile) If Workbooks(sFile).HasVBProject Then sFoundFiles = sFoundFiles & sFile & vbCrLf End If Workbooks(sFile).Close (False) End If sFile = Dir ' Get next filename Loop If Len(sFoundFiles) = 0 Then MsgBox "No workbooks found that contain macros" Else sFoundFiles = "The following workbooks contain macros:" & _ vbCrLf & vbCrLf & sFoundFiles MsgBox sFoundFiles End If End Sub
本示例使用HasVBProject属性(在Excel 2007中引入Excel对象模型)来确定文件是否具有任何宏。完成后,宏将显示一个消息框,其中列出了包含宏的那些工作表。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(12466)适用于Microsoft Excel 2007、2010、2013和2016。您可以在此处为Excel的较旧菜单界面找到此技巧的版本:
链接:/ excel-Finding_Workbooks_Containing_Macros [查找包含宏的工作簿]。