形状.旋转属性行为


With sketch
.ScaleHeight 16, msoFalse
.ScaleWidth 16, msoFalse
.Fill.Visible = False
.Line.Weight = 1
.Line.ForeColor.RGB = RGB(0, 0, 0)
.Left = XCoordinate
.Top = YCoordinate
.Rotation = AngleDeg
End With

这是我正在编写的代码。我使用在 for 循环的每次迭代中都会更改的公式计算 X 和 Y 坐标。

我的问题是,这个形状在旋转之前会变成给定的 X 和 Y吗?另外,当它按存储在可变角度度中的这个角度值旋转时,它使用的旋转轴是什么

我对此感到担忧,因为如果它围绕它的左上角旋转,那么这对我来说是一个问题,因为我需要它围绕穿过其中心点的轴旋转。 这也是为什么我在这个左和顶部属性之前有我的缩放宽度和缩放高度属性的原因。

我发现它使用了草图中心的正确 X 和 Y(考虑到草图的原点在左上角计算(,但是当它缩放草图时它受到干扰,然后移动/弄乱草图中心的坐标。

请指导。

下一个过程能够根据形状的中心坐标旋转形状。当然,当您测试它(不变(时,在活动工作表上,您必须具有一个名为"sketch"的形状:

Sub testRotFunction()
Dim sketch As Shape
Set sketch = ActiveSheet.Shapes("sketch")
centerRotation sketch, 0
End Sub
Sub centerRotation(sR As Shape, rotAngle As Double)
Dim rad As Double, x As Double, y As Double
Dim x1 As Double, x2 As Double
x = sR.Top: y = sR.Left
x1 = (sR.Width / 2) * -1
x2 = sR.Height
rad = rotAngle * Atn(1) / 45
With sR
.Top = x + (.Height - .Width / 2 - x1 - x2) * (1 - Cos(rad)) / 2
.Left = y + (.Height - .Width / 2 - x1 - x2) * Sin(rad) / 2
.Rotation = rotAngle
End With
End Sub