I have a button called btnTest and i want to retrive a string as its click event (btnTest_Click), so i tried like below but with no results:
Private Sub btnTest_Click()
Dim strModule As String
strModule = Me.Application.VBE.ActiveCodePane.CodeModule.ProcOfLine(Me.Application.VBE.ActiveCodePane.TopLine, 0)
MsgBox strModule
End Sub
the msgbox has to display the string "btnTest_Click", i thought local variables can help too but i don't know how to manage them..
PS: This question was marked as duplicate of this thread that is error handling oriented, my question was not oriented for that purpose.. So I examinated that thread and i found a solution for my question that is much more versatile.
You can use this code in a module:
Public Function GetFnOrSubName(ObjName As Object, checkType As Boolean) As String
Dim VBProj As Object
Dim VBComp As Object
Dim CodeMod As Object
Set VBProj = Application.VBE.ActiveVBProject
Set VBComp = VBProj.VBComponents(ObjName.Application.VBE.CodePanes(2).CodeModule.Name)
Set CodeMod = VBComp.CodeModule
Dim code$
code = CodeMod.Lines(1, CodeMod.CountOfLines)
Dim CodeBlock
CodeBlock = InStr(1, code, ObjName.Name, vbTextCompare)
If CodeBlock Then
Dim isFunction
Dim isSub
If checkType = True Then
isFunction = InStrRev(Mid$(code, 1, CodeBlock), "Function", -1, vbTextCompare)
isSub = InStrRev(Mid$(code, 1, CodeBlock), "Sub", -1, vbTextCompare)
Else
isFunction = InStrRev(Mid$(code, 1, CodeBlock), "Function", -1, vbTextCompare) + 8
isSub = InStrRev(Mid$(code, 1, CodeBlock), "Sub", -1, vbTextCompare) + 3
End If
If isFunction > isSub Then
' it's a function
GetFnOrSubName = Split(Mid$(code, isFunction, 40), "(")(0)
Else
' it's a sub
GetFnOrSubName = Split(Mid$(code, isSub, 40), "(")(0)
End If
End If
End Function
You can test it in a button:
Private Sub btnTest_Click()
MsgBox GetFnOrSubName(Screen.ActiveControl, False)
End Sub
Hope this can help.