If doing it programmatically, you could pass the shape name (or whatever) to the subroutine as a parameter. By making the parameter optional in the subroutine, you can still call it from clicking on shapes.
Code:
Option Explicit
Sub AppCaller(Optional Param As Variant)
On Error GoTo ErrHandler
Dim ShapeSelection As String
If IsMissing(Param) Then
ShapeSelection = Application.Caller
Else
ShapeSelection = CStr(Param)
End If
Select Case ShapeSelection
Case "shp1"
DoSomething1
Case "shp2"
DoSomething2
Case Else
MsgBox ShapeSelection
End Select
ErrHandler:
If Err.Number <> 0 Then MsgBox Err.Number & vbNewLine & Err.Description
End Sub
Sub DoSomething1()
MsgBox "Do something one way"
End Sub
Sub DoSomething2()
MsgBox "Do something another way"
End Sub
Sub Problem()
AppCaller
End Sub
Sub OnePossibility()
AppCaller "Pass the name of the shape as a parameter?"
End Sub