excel - Shape.Rotation 属性行为
问题描述
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 吗?另外,当它旋转存储在变量 AngleDeg 中的这个角度值时,它使用的旋转轴是什么?
我对此感到担心,因为如果它围绕它的左上角旋转,那么这对我来说是个问题,因为我需要它围绕通过它的中心点的轴旋转。这也是为什么我在此 Left 和 Top 属性之前拥有 scalewidth 和 scaleheight 属性的原因。
我发现它使用了草图中心的正确 X 和 Y(考虑到草图的原点在左上角计算),但是当它缩放草图时它会受到干扰,然后移动/弄乱 co -草图中心的坐标。
请指导。
解决方案
下一个过程能够根据其中心坐标旋转一个形状。当然,当您测试它(未更改)时,在活动工作表上您必须有一个名为“草图”的形状:
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
推荐阅读
- java - 使用来自矩阵和特定颜色渐变的数据在 Java 中为 Android 创建 2D 热图
- sql - 从 sql 请求创建工作表
- flutter - 如何在 HookWidget 的 SliverList 中添加拉取更新
- oracle - Ora2pg 致命:错误:“实体 $code_”列中的空值违反非空约束
- pptxgenjs - 使用 pptxgenjs,添加一张完整的幻灯片图片
- nginx - 在 Nginx 的访问日志中显示从 auth_request 检索到的远程用户
- python - 使用熊猫按给定时间间隔分组日期和处理
- flutter - Flutter 中使用 BLoC 的文件上传进度
- arrays - int 数组的长度
- azure-ad-b2c - 如何使用电子邮件或电话以及唯一电子邮件/电话和自定义字段使用具有 MFA 的用户名配置 Azure b2c 注册和登录?