如何使用VBA檢查工作簿中是否存在子/函數?Excel VBA - 檢查函數/子是否存在於另一個工作簿
我正在寫一個宏包括在不同的工作簿上的子調用。我可以讓其他工作簿中的子程序使用原始工作簿中的代碼運行正常,我試圖找到一種先檢查子/函數是否存在的好方法(在子程序被重命名等情況下的錯誤處理) 。
我搜索了互聯網,可以看到一個模塊是否存在的例子,任何幫助,將不勝感激!
感謝,
亞當
如何使用VBA檢查工作簿中是否存在子/函數?Excel VBA - 檢查函數/子是否存在於另一個工作簿
我正在寫一個宏包括在不同的工作簿上的子調用。我可以讓其他工作簿中的子程序使用原始工作簿中的代碼運行正常,我試圖找到一種先檢查子/函數是否存在的好方法(在子程序被重命名等情況下的錯誤處理) 。
我搜索了互聯網,可以看到一個模塊是否存在的例子,任何幫助,將不勝感激!
感謝,
亞當
您可以處理來自缺少procesure錯誤,或者您可以使用的Visual Basic應用程序擴展庫
這是有據可查的Chip Pearson's website
這裏是我找到的代碼Chip Peartsons網站很久以前和修改:
Option Explicit
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 VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Dim ProcName As String
Dim LineNum As Integer
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
工作很好,非常感謝! – AdamDynamic 2013-04-26 12:25:49
在調用函數之前使用'On error Goto ...'。 – 2013-04-24 13:05:54
@iDevlop應該如何工作。確保在函數調用後立即將'On Error GoTo 0'放置**,以恢復正常的錯誤處理,並且包含一個錯誤處理塊以在出現錯誤時通知用戶並退出子。 – 2013-04-24 13:43:29