我有一些代码可以查看用户可以编辑的线的位置。编辑此行的目的是从到目前为止有效的绘图计划中获得粗略的测量结果。我正在努力通过记录测量到的位置来使它更具交互性。
这是问题所在。当这个形状(连接器弯头)在机柜和接入点上时,它使用shape.top和shape.left (下面的代码)以点为单位记录其位置。当我调整这一行的大小以将接入点的一端放在另一个接入点上时,机柜的位置也发生了变化,即使它没有移动。我确实注意到图上的比例、高度和宽度发生了变化,但我不知道为什么这会影响初始点。
值得注意的是,当您旋转弯头连接器时,宽度和高度的值也会随之旋转。这意味着有时高度是上下变化的,有时它是您期望的宽度值。仍然,只有当连接器旋转180度时,左侧位置才保持不变。
缩放高度/宽度与顶部/左侧的值之间是否存在关系?
Sub Measure()
Set sp = ActiveSheet.Shapes("Measurement")
Msgbox(sp.Top & "//" & sp.Left)
end sub编辑:所以我意识到我提到了很多关于这个程序的内容,真正的问题是为什么左上角的测量值会发生变化,而左上角在屏幕上保持不变?并且仅在270/90旋转时(根据拖动线的方式自动发生)
添加屏幕截图(测量值在顶部然后向左) This is the first screen shot with a 270 rotation This is the second, notice the top left stayed stationary but the points changed下一组是180/0旋转(形状自动旋转,否则我会将其锁定并完成)。Rotated 180 first screen shot Rotated 180 second screen shot
发布于 2019-01-17 16:03:22
我很同情你的问题认识,我不理解这个现象,但经过测试,似乎即使旋转了图形,原始坐标也是保留的。这是因为即使再次执行旋转,也会通过原始坐标值执行旋转。如果人为地对齐位置,坐标会相应地移动。我对它进行了如下测试。
Sub Measure()
Dim rngT As Range
Dim sp As Shape
Set sp = ActiveSheet.Shapes("Measurement")
'MsgBox (sp.Top & "//" & sp.Left)
Set rngT = Range("k" & Rows.Count).End(xlUp).Offset(1, 0)
rngT = sp.Top
rngT.Offset(, 1) = sp.Left
End Sub
Sub test()
Dim sp As Shape
Dim Ws As Worksheet
Dim vDB
Dim i As Integer, t As Single, l As Single
Dim r As Integer
vDB = Range("k2", Range("L" & Rows.Count).End(xlUp))
Set Ws = ActiveSheet
r = UBound(vDB, 1)
For i = 1 To r
t = vDB(i, 1)
l = vDB(i, 2)
Set sp = Ws.Shapes.AddShape(msoShapeRectangle, l, t, 10, 10)
Next i
End Sub发布于 2019-01-17 23:37:55
我想通了,伙计们。
因此,在方向0或180上,Shape.top和Shape.Left提供准确一致的测量结果。
在90或270中,必须调整顶部和左侧,以提供准确一致的测量结果。
代码是Shape.Top-((Shape.Width-Shape.Height)/2)和Shape.Left+((Shape.Width-Shape.Height)/2)
(注意:此调整仅在对象旋转90或270//Shape.Rotation时适用)
此外,此处使用的形状是弯头连接件。
https://stackoverflow.com/questions/54226575
复制相似问题