I would not call it smooth but maybe you can play with the settings...
Maybe:
Option Explicit
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Sub MouseMoveObjectTest()
Dim lngCurPos As POINTAPI
Dim DocZero As POINTAPI
Dim PointsPerPixelY As Double
Dim PointsPerPixelX As Double
Dim hdc As Long
Dim sp As Shape, a As Shape
Dim CenterRowStationary As Double
Dim CenterColStationary As Double
Dim CenterRowMoving As Double
Dim CenterColMoving As Double
Dim MovementSpeed As Double
Dim TriangleHeight As Double
Dim TriangleWidth As Double
Dim TriangleHyp As Double
Dim NewTriangleHeight As Double
Dim NewTriangleWidth As Double
For Each sp In ActivePresentation.Slides(1).Shapes
sp.Delete
Next
Set a = ActivePresentation.Slides(1).Shapes.AddShape(92, 50, 50, 20, 20)
a.Fill.ForeColor.RGB = RGB(0, 75, 150)
hdc = GetDC(0)
PointsPerPixelY = 72 / GetDeviceCaps(hdc, 90)
PointsPerPixelX = 72 / GetDeviceCaps(hdc, 88)
ReleaseDC 0, hdc
DocZero.Y = ActiveWindow.PointsToScreenPixelsY(0)
DocZero.X = ActiveWindow.PointsToScreenPixelsX(0)
Do
GetCursorPos lngCurPos
CenterRowStationary = (lngCurPos.Y - DocZero.Y) * PointsPerPixelY
CenterColStationary = (lngCurPos.X - DocZero.X) * PointsPerPixelX
CenterRowMoving = a.Top + a.Height / 2
CenterColMoving = a.Left + a.Width / 2
MovementSpeed = 1
TriangleHeight = Abs(CenterRowStationary - CenterRowMoving)
TriangleWidth = Abs(CenterColStationary - CenterColMoving)
TriangleHyp = Sqr(TriangleHeight ^ 2 + TriangleWidth ^ 2)
If TriangleHeight = 0 Then
NewTriangleHeight = 0
Else
NewTriangleHeight = (TriangleHeight / TriangleHyp) * MovementSpeed
End If
If TriangleWidth = 0 Then
NewTriangleWidth = 0
Else
NewTriangleWidth = (TriangleWidth / TriangleHyp) * MovementSpeed
End If
With a
If (.Top + .Height / 2) > CenterRowStationary Then .Top = .Top - NewTriangleHeight
If (.Top + .Height / 2) < CenterRowStationary Then .Top = .Top + NewTriangleHeight
If (.Left + .Width / 2) > CenterColStationary Then .Left = .Left - NewTriangleWidth
If (.Left + .Width / 2) < CenterColStationary Then .Left = .Left + NewTriangleWidth
End With
DoEvents
Loop
End Sub