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.
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
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