Excel VBA – 检查function/子是否存在于另一个工作簿中

我如何使用VBA检查工作簿中是否存在子/函数?

我正在写一个macros包括在不同的工作簿上的子调用。 我可以得到另一个工作簿中的子使用原始工作簿中的代码运行正常,我试图find一个很好的方法首先检查子/function是否存在(error handling的情况下,子已重命名等) 。

我搜查了互联网,可以看到检查模块是否存在的例子,任何帮助,将不胜感激!

谢谢,

亚当

您可以处理来自缺less的处理的错误,也可以使用Visual Basic for Applications扩展性库

Chip Pearson的网站上有很好的文档logging

这里是我在几年前Chip Peartsons网站上find的代码,并进行了修改:

 Function checkProcName(wBook As Workbook, sModuleName As String, sProcName As String) As Boolean ' =========================================================================== ' Found on http://www.cpearson.com at http://www.cpearson.com/excel/vbe.aspx ' then modified ' ' USAGE: ' to check if a procedure exists, call 'checkProcName' passing ' in the target workbook (which should be open), the Module, ' and the procedure name ' ' =========================================================================== Dim oVBProj As VBIDE.VBProject Dim VBComp As VBIDE.VBComponent Dim CodeMod As VBIDE.CodeModule Dim ProcName As String Dim ProcKind As VBIDE.vbext_ProcKind checkProcName = False Set VBProj = wBook.VBProject Set VBComp = VBProj.VBComponents(sModuleName) Set CodeMod = VBComp.CodeModule With CodeMod LineNum = .CountOfDeclarationLines + 1 Do Until LineNum >= .CountOfLines ProcName = .ProcOfLine(LineNum, ProcKind) If ProcName = sProcName Then checkProcName = True Exit Do End If Debug.Print ProcName LineNum = .ProcStartLine(ProcName, ProcKind) + .ProcCountLines(ProcName, ProcKind) + 1 Loop End With End Function Function ProcKindString(ProcKind As VBIDE.vbext_ProcKind) As String Select Case ProcKind Case vbext_pk_Get ProcKindString = "Property Get" Case vbext_pk_Let ProcKindString = "Property Let" Case vbext_pk_Set ProcKindString = "Property Set" Case vbext_pk_Proc ProcKindString = "Sub Or Function" Case Else ProcKindString = "Unknown Type: " & CStr(ProcKind) End Select End Function