You are going to have to resort to some API wizardry and create a hotspot. I don't know how to do that and the following dirty solution may be good enough. Your CPU may scream but DoEvents will yield to other processes and I noticed no problem with performance on my older PC.
The example download contains a class module named, "ShapeEvents" and some code in the thisworkbook class. Sheet1 has a shape named "Rectangle1". See the example download...
ShapeEvents.zip
Class ShapeEvents code:
<table border="1" bgcolor="White"><caption ALIGN=left>
<font size="2" face=Courier New>Example VBA Code:</FONT></caption><tr><td><font size="2" face=Courier New> <font color="#0000A0">Option</font> <font color="#0000A0">Explicit</font>
<font color="#0000A0">Private</font> <font color="#0000A0">Declare</font> <font color="#0000A0">Function</font> GetCursorPos <font color="#0000A0">Lib</font> "user32" _
(lpPoint <font color="#0000A0">As</font> POINTAPI) <font color="#0000A0">As</font> <font color="#0000A0">Long</font> ' <font color="#0000A0">Declare</font> API
<font color="#0000A0">Private</font> <font color="#0000A0">Type</font> POINTAPI ' <font color="#0000A0">Declare</font> types
x <font color="#0000A0">As</font> <font color="#0000A0">Long</font>
y <font color="#0000A0">As</font> <font color="#0000A0">Long</font>
<font color="#0000A0">End</font> <font color="#0000A0">Type</font>
<font color="#0000A0">Public</font> <font color="#0000A0">Event</font> ShapeEnter(Sh <font color="#0000A0">As</font> Shape)
<font color="#0000A0">Public</font> <font color="#0000A0">Event</font> ShapeExit(Sh <font color="#0000A0">As</font> Shape)
<font color="#0000A0">Private</font> pEnableEvents <font color="#0000A0">As</font> <font color="#0000A0">Boolean</font>
<font color="#0000A0">Private</font> pPreviousObjectsName <font color="#0000A0">As</font> <font color="#0000A0">String</font>
<font color="#0000A0">Private</font> pInHover <font color="#0000A0">As</font> <font color="#0000A0">Boolean</font>
<font color="#0000A0">Private</font> pInHoverShape <font color="#0000A0">As</font> Shape
<font color="#0000A0">Private</font> ws <font color="#0000A0">As</font> Worksheet
<font color="#0000A0">Public</font> <font color="#0000A0">Property</font> <font color="#0000A0">Let</font> EnableEvents(Value <font color="#0000A0">As</font> Boolean)
pEnableEvents = Value
<font color="#0000A0">If</font> pEnableEvents <font color="#0000A0">Then</font> Tracking
<font color="#0000A0">End</font> <font color="#0000A0">Property</font>
<font color="#0000A0">Public</font> <font color="#0000A0">Property</font> <font color="#0000A0">Get</font> EnableEvents() <font color="#0000A0">As</font> <font color="#0000A0">Boolean</font>
EnableEvents = pEnableEvents
<font color="#0000A0">End</font> <font color="#0000A0">Property</font>
<font color="#0000A0">Private</font> <font color="#0000A0">Sub</font> Tracking()
<font color="#0000A0">Dim</font> pt <font color="#0000A0">As</font> POINTAPI
<font color="#0000A0">Dim</font> o <font color="#0000A0">As</font> <font color="#0000A0">Object</font>
<font color="#0000A0">Dim</font> CurrentObjectsName <font color="#0000A0">As</font> <font color="#0000A0">String</font>
<font color="#008000"> 'On Error Resume Next</font>
<font color="#0000A0">Do</font> <font color="#0000A0">Until</font> <font color="#0000A0">Not</font> pEnableEvents
DoEvents
GetCursorPos pt
<font color="#0000A0">Set</font> o = ActiveWindow.RangeFromPoint(pt.x, pt.y)
<font color="#0000A0">Select</font> <font color="#0000A0">Case</font> TypeName(o)
<font color="#0000A0">Case</font> "Range", "Nothing"
pPreviousObjectsName = ""
<font color="#0000A0">If</font> pInHover <font color="#0000A0">Then</font>
<font color="#0000A0">RaiseEvent</font> ShapeExit(pInHoverShape)
pInHover = False
<font color="#0000A0">End</font> <font color="#0000A0">If</font>
<font color="#0000A0">Case</font> <font color="#0000A0">Else</font>
CurrentObjectsName = o.Name
<font color="#0000A0">If</font> CurrentObjectsName <> pPreviousObjectsName <font color="#0000A0">Then</font>
<font color="#0000A0">If</font> pInHover <font color="#0000A0">Then</font> <font color="#0000A0">RaiseEvent</font> ShapeExit(ws.Shapes(pPreviousObjectsName))
pPreviousObjectsName = CurrentObjectsName
<font color="#0000A0">Set</font> pInHoverShape = ws.Shapes(CurrentObjectsName)
<font color="#0000A0">RaiseEvent</font> ShapeEnter(pInHoverShape)
pInHover = True
<font color="#0000A0">End</font> <font color="#0000A0">If</font>
<font color="#0000A0">End</font> <font color="#0000A0">Select</font>
<font color="#0000A0">Loop</font>
<font color="#0000A0">End</font> <font color="#0000A0">Sub</font>
<font color="#0000A0">Private</font> <font color="#0000A0">Sub</font> Class_Initialize()
<font color="#0000A0">Set</font> ws = ActiveSheet
<font color="#0000A0">End</font> <font color="#0000A0">Sub</font>
<font color="#0000A0">Private</font> <font color="#0000A0">Sub</font> Class_Terminate()
pEnableEvents = False
<font color="#0000A0">End</font> <font color="#0000A0">Sub</font>
</FONT></td></tr></table>
ThisWorkbook Class Code:
<table border="1" bgcolor="White"><caption ALIGN=left>
<font size="2" face=Courier New>Example VBA Code:</FONT></caption><tr><td><font size="2" face=Courier New> <font color="#0000A0">Option</font> <font color="#0000A0">Explicit</font>
<font color="#0000A0">Private</font> <font color="#0000A0">WithEvents</font> MyShapeEvents <font color="#0000A0">As</font> ShapeEvents
<font color="#0000A0">Private</font> <font color="#0000A0">Sub</font> MyShapeEvents_ShapeEnter(Sh <font color="#0000A0">As</font> Shape)
<font color="#0000A0">Select</font> <font color="#0000A0">Case</font> Sh.Name
<font color="#0000A0">Case</font> "Rectangle 1"
Sh.Fill.ForeColor.SchemeColor = 10
Sh.TextFrame.Characters.Text = "Click Me!"
Sh.TextFrame.HorizontalAlignment = xlCenter
Sh.TextFrame.VerticalAlignment = xlCenter
<font color="#0000A0">With</font> Sh.TextFrame.Characters(Start:=1, Length:=9).Font
.FontStyle = "Bold"
.Size = 16
.Underline = xlUnderlineStyleSingle
.ColorIndex = 6
<font color="#0000A0">End</font> <font color="#0000A0">With</font>
Sh.Line.Weight = 6#
Sh.Line.ForeColor.SchemeColor = 40
<font color="#008000"> 'Case "Some Other shape here"</font>
<font color="#0000A0">End</font> <font color="#0000A0">Select</font>
<font color="#0000A0">End</font> <font color="#0000A0">Sub</font>
<font color="#0000A0">Private</font> <font color="#0000A0">Sub</font> MyShapeEvents_ShapeExit(Sh <font color="#0000A0">As</font> Shape)
<font color="#0000A0">Select</font> <font color="#0000A0">Case</font> Sh.Name
<font color="#0000A0">Case</font> "Rectangle 1"
Sh.Fill.ForeColor.SchemeColor = 64
Sh.TextFrame.Characters.Text = ""
Sh.Line.Weight = 1#
Sh.Line.ForeColor.SchemeColor = 64
<font color="#0000A0">End</font> <font color="#0000A0">Select</font>
<font color="#0000A0">End</font> <font color="#0000A0">Sub</font>
<font color="#0000A0">Sub</font> Rectangle1_Click()
MsgBox "Your macros code here..."
<font color="#0000A0">End</font> <font color="#0000A0">Sub</font>
<font color="#0000A0">Private</font> <font color="#0000A0">Sub</font> Workbook_Open()
<font color="#0000A0">Set</font> MyShapeEvents = <font color="#0000A0">New</font> ShapeEvents
MyShapeEvents.EnableEvents = True
<font color="#0000A0">End</font> <font color="#0000A0">Sub</font>
<font color="#0000A0">Private</font> <font color="#0000A0">Sub</font> Workbook_SheetActivate(ByVal Sh <font color="#0000A0">As</font> Object)
<font color="#0000A0">Set</font> MyShapeEvents = <font color="#0000A0">New</font> ShapeEvents
MyShapeEvents.EnableEvents = True
<font color="#0000A0">End</font> <font color="#0000A0">Sub</font>
<font color="#0000A0">Private</font> <font color="#0000A0">Sub</font> Workbook_SheetDeactivate(ByVal Sh <font color="#0000A0">As</font> Object)
<font color="#0000A0">On</font> <font color="#0000A0">Error</font> <font color="#0000A0">Resume</font> <font color="#0000A0">Next</font>
MyShapeEvents.EnableEvents = False
<font color="#0000A0">Set</font> MyShapeEvents = <font color="#0000A0">Nothing</font>
<font color="#0000A0">End</font> <font color="#0000A0">Sub</font>
</FONT></td></tr></table>