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这是我正在写的代码。我使用一个公式计算X和Y坐标,这个公式在for循环的每一次迭代中都会发生变化。
我的问题是,在旋转之前,这个形状会变成给定的X和Y吗?另外,,当它通过存储在变量AngleDeg中的角度值旋转时,它使用的旋转轴是什么?
我对此很担心,因为如果它在左上角旋转,那对我来说是个问题,因为我需要它绕轴旋转,通过它的中点。这也是为什么我在左边和顶部属性之前有我的尺度宽度和尺度高度属性的原因。
我发现它使用的是我的素描中心的正确的X和Y(考虑到素描的起源在左上角),但是当它缩放素描时,它会受到干扰,然后移动/破坏草图中心的协调。
请指点。
发布于 2019-12-29 16:46:56
下一个程序可以根据其中心坐标旋转形状。当然,当您测试它(未更改)时,在活动工作表上必须有一个名为“草图”的形状:
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 Subhttps://stackoverflow.com/questions/59518790
复制相似问题