与许多其他公司一样,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 [查找包含宏的工作簿]。