6.3 判断过程是否存在
6.3.1 判断指定过程是否存在自定义函数
'函数功能:判断指定过程是否存在,存在输出为真
Public Function VBProcExists(ByVal VBProcName As String, _
Optional VBCompNameOrIndex As Variant) As Boolean
Dim VBProj As VBProject
Dim VBCodeModule As CodeModule
Dim ProcKind As vbext_ProcKind '过程类型
Dim LineNum As Long '代码行
Dim ProcName As String '获得过程名
Set VBProj = VBE.ActiveVBProject
'如不指定部件及为当前窗格代码模块
If VBCompNameOrIndex = "" Then
Set VBCodeModule = VBE.ActiveCodePane.CodeModule
Else
Set VBCodeModule = VBProj.VBComponents(VBCompNameOrIndex).CodeModule
End If
With VBCodeModule
'获得代码所在起始行,等于申明行加一
LineNum = .CountOfDeclarationLines + 1
'获得指定行所在过程名
ProcName = .ProcOfLine (LineNum, ProcKind)
'申明后第一行开始循环至代码结束,将获取过程名及类型名输出
Do Until LineNum >= .CountOfLines
'进行二进制比对,比对结果等零,则存在
If StrComp(VBProcName, ProcName) = 0 Then
VBProcExists = True
Exit Do
End If
'代码行数累加,将根据所在行获得过程名
LineNum = LineNum + .ProcCountLines(ProcName, ProcKind)
ProcName = .ProcOfLine(LineNum, ProcKind)
Loop
End With
End Function
6.3.2 调用自定义函数示例
'示例一:指定过程名,但不指定部件
Debug.Print VBProcExists("过程名")
'示例二:指定过程名"ShowProcedureInfo",并指定部件名
Debug.Print VBProcExists("过程名","部件名")
'示例三:指定过程名,并通过索引指定部件
Debug.Print VBProcExists("过程名",3)
6.4 获得指定行所在过程名
6.4.1 获得指定行过程名自定义函数
'---------------------------------------------------------------------
'函数功能:获得指定行过程名
'---------------------------------------------------------------------
Public Function GetLineProcName (ByVal LineNum As Long) As String
Dim CodeMod As CodeModule '申明代码模块
Dim VBpane As VBIDE.CodePane '代码模块所在窗格
Dim NumLines As Long '代码行数
Dim ProcName As String '过程名
Dim ProcKind As vbext_ProcKind '过程类型
'实例化为当前代码窗口
Set VBpane = VBE.ActiveCodePane
'实例化为当前窗格代码模块
Set CodeMod = VBpane.CodeModule
With CodeMod
'获得代码起始行行数
NumLines = .CountOfDeclarationLines + 1
'判断是否为申明代码行
If LineNum > NumLines Then
ProcName = .ProcOfLine (LineNum, ProcKind)
Else
GetLineProcName = -1 '如为申明代码行,则输出为负1
Exit Function
End If
End With
'过程名输出
GetLineProcName = ProcName
End Function
6.4.2 调用指定行过程名函数示例
'获得指当前代码窗口行号第26行代码所在过程名
Call GetLineProcName(26)
(已对判断过程是否存在代码进行更新 )
上一页 下一页