Shapes rotate about their center

Shapes rotate about the center of their bounding box. The rotation is in degrees. The direction is clockwise. The following two routine will allow you to rotate from either the top-center or bottom-center of the bounding box. In order to do so, the shape's .Top and .Left parameters are adjusted. After using these rotation routines, you may want to restore .Top and .Left back to their original place, plus restore the .Rotation parameter back to 0. In the following code, the original_Top and original_Left are saved before any changes. Choose your shape number.

Rotate around Top

Sub rotate_around_top()
    With ActiveSheet.Shapes(1)
        original_Top = .Top
        original_Left = .Left
        For a = 0 To 360        ' spin once (360 degrees)
            t = a * Atn(1) / 45 ' convert to radians
            .Rotation = a       ' set shape rotation in degrees
            .Top = original_Top - .Height * (1 - Cos(t)) / 2
            .Left = original_Left - .Height * Sin(t) / 2
            DoEvents
        Next a
    End With
End Sub

Rotate around Bottom

Sub rotate_around_bottom()
    With ActiveSheet.Shapes(1)
        original_Top = .Top
        original_Left = .Left
        For a = 0 To 360        ' spin once (360 degrees)
            t = a * Atn(1) / 45 ' convert to radians
            .Rotation = a       ' set shape rotation in degrees
            .Top = original_Top + .Height * (1 - Cos(t)) / 2
            .Left = original_Left + .Height * Sin(t) / 2
            DoEvents
        Next a
    End With
End Sub