是否有可用的参考资料详细说明每个“adjustment property
”对 Excel 2010 中提供的各种自选图形对象的作用?
我的具体问题是我以编程方式将msoShapeTrapezoid自动形状插入到工作表中:
.AddShape(msoShapeTrapezoid, Left, Top, Width, Height)
...定义了梯形的矩形范围。然后我试图使用:
shpTrapezoid.Adjustments(1) = ValueX
设置梯形顶部的大小(相当于我手动调整自动形状上的单个手柄),但我无法弄清楚这个调整属性代表什么(虽然我已经想出了一个值0
使梯形成为矩形。
所以我知道了梯形底部的大小,梯形顶部的大小和我想绘制的梯形的高度(并且它是对称的), ValueX必须具备什么要在屏幕上正确定义它吗?
答案 0 :(得分:0)
首先,抱歉我的英语不好......
我在几个小时内一直在努力解决这个问题,我发现msoShapeTrapezoid的调整是一个系数,如果宽度小于高度或高度,必须乘以表格的宽度如果高度小于宽度,则为形式。
这也解释了为什么这种调整可以大于0.5(如果形状的高度小于其宽度,则调整可以大于0.5:最大值是宽度除以高度,但在另一种情况下最大值是值是0.5)。
因此,如果你想画一个梯形,调整必须像这样计算:将梯形的顶部减去底部,除以结果2,如果高度为高,则将新结果除以梯形的高度。在另一种情况下,小于宽度或宽度。
这也适用于msoShapeParallelogramm;调整必须乘以Min(宽度;高度)。
这些自选形状中存在很多小错误...(例如,msoShapeRegularPentagone不是正五边形...但是基数是通过将形式的宽度乘以黄金比率减去1来计算的。位于表格左侧和右侧的点的“高程”也等于GoldenRation减1乘以表格的宽度:结果接近正五边形,但不是)
答案 1 :(得分:0)
我知道这是一个老线程,但它与我目前的项目有关,我想我会投入我找到的解决方案 - 对于我的项目,我想定义Width,Height和TopWidth。这样,传递给调整属性的值是:
shpTrapezoid.Adjustments(1) = (Width - TopWidth)/(2 * Height)
无论哪个更大(高度或宽度)都应该可以工作,因为可能你的TopWidth总是正面的。
答案 2 :(得分:0)
缺少有关此主题的AutoShape特定文档,这令人失望,对吗?更令人沮丧的是:“自选图形”的各种.Adjustments
的值没有出现在“本地”窗口中;我们唯一可以看到的有用信息是.Count
。
这使我编写了以下实用程序子目录,每当研究其他自选图形时,我都会不断添加该子目录。
'Usage: select AutoShape in question then run this...
Sub AutoShapeAdjustments()
Dim ii As Integer
Dim SHP As Shape
Set SHP = Selection.ShapeRange(1)
With SHP
For ii = 1 To .Adjustments.Count
Debug.Print "Adj# " & ii & " ="; .Adjustments(ii)
Next ii
Stop 'to review IW contents & update/add to `Select Case` block
Select Case .AutoShapeType
Case msoShapeArc
.Adjustments(1) = 135 'tail angle; CW from 0 = east
.Adjustments(2) = 45 'arrow angle
Case msoShapeCircularArrow
.Adjustments(1) = 0.1 'arrow throat thickness (1 & 3 share a handle)
.Adjustments(2) = 15 'arrow head length
.Adjustments(3) = 45 'revolution angle, arrow; CW from 0 = east
.Adjustments(4) = 135 'revolution angle, tail
.Adjustments(5) = 0.1 'arrow head width excl. throat
Case msoShapeDownArrow, msoShapeUpArrow, msoShapeRightArrow, msoShapeLeftArrow
.Adjustments(1) = 0.5 'arrow throat thickness
.Adjustments(2) = 0.5 'arrow head length
End Select
End With
If MsgBox("Clear Immediate Window?", vbYesNo + vbDefaultButton2) = vbYes Then
Application.SendKeys "^g ^a {BACKSPACE}"
Else
Debug.Print "--------------------"
End If
End Sub
我运行了几次,以找出并记下每个.Adjustment
的工作。然后,一旦我微调了一组值,就将它们粘贴到我正在处理的代码中。
答案 3 :(得分:0)
以防将来对任何人有帮助,这是我添加梯形的方法
Function AddTrapezoid(wks As Worksheet, sglCentre As Single, sglTop As Single, _
sglWidthTop As Single, sglWidthBottom As Single, sglHeight As Single) As Shape
Set AddTrapezoid = wks.Shapes.AddShape(msoShapeTrapezoid, sglCentre - sglWidthBottom / 2, _
sglTop, sglWidthBottom, sglHeight)
AddTrapezoid.Adjustments.Item(1) = (sglWidthBottom - sglWidthTop) / 2# / _
IIf(sglHeight < sglWidthBottom, sglHeight, sglWidthBottom)
End Function
无论高度或宽度最大,这都适用,与@sherco40 提供的答案相匹配