Sub ModuleNameTest()
Run "MyMacroInfo"
End Sub
Private Sub MyMacroInfo()
Dim MacroName$, SubName$, ModArr As Variant
Dim ModName As Object, strModName$, i&, j&
MacroName = ActiveSheet.Buttons(Application.Caller).OnAction
SubName = Application.Replace(MacroName, 1, Application.Search("!", MacroName), "")
ModArr = Array(0, 1, 2, 3)
For Each ModName In ActiveWorkbook.VBProject.VBComponents
For j = LBound(ModArr) To UBound(ModArr)
i = 0
On Error Resume Next
i = ModName.CodeModule.ProcStartLine(SubName, CLng(ModArr(j)))
Err.Clear
If i > 0 Then
strModName = ModName.Name
Exit For
End If
Next j
Next ModName
MsgBox _
"Full macro name:" & vbCrLf & MacroName & vbCrLf & vbCrLf & _
"Actual subroutine name:" & vbCrLf & SubName & vbCrLf & vbCrLf & _
"Module name where " & SubName & " is housed: " & vbCrLf & strModName, _
64, "Information about macro being run..."
End Sub