1

是否有任何地方可用的参考资料详细说明每个“ ”对Excel 2010中可用adjustment property的各种Autoshape 对象的作用?

我的具体问题是我以编程方式将 msoShapeTrapezoid 自动形状插入到工作表中:

.AddShape(msoShapeTrapezoid, Left, Top, Width, Height)

...它定义了梯形的矩形范围。然后我尝试使用:

shpTrapezoid.Adjustments(1) = ValueX

设置梯形顶部的大小(我猜这相当于手动调整 autoshape 上的单个手柄),但我无法弄清楚这个调整属性代表什么(尽管我已经弄清楚0了梯形一个矩形)。

因此,鉴于我知道梯形底部的大小、梯形顶部的大小和要绘制的梯形高度(并且它是对称的),ValueX 必须是什么才能正确定义它屏幕?

4

4 回答 4

0

首先,对不起我的英语不好......

我在几个小时内一直在努力解决这个问题,我发现 msoShapeTrapezoid 的调整是一个系数,如果宽度小于高度或表单的高度,则必须乘以表单的宽度如果高度小于宽度。

这也解释了为什么这个调整可以大于 0.5(如果窗体的高度小于它的宽度,调整可以大于 0.5:最大值是宽度除以高度,但在其他情况下最大值是 0.5 )。

所以如果你想画一个梯形,调整必须这样计算:梯形的顶部减去底部,结果除以2,如果高度小于梯形的高度,则新结果除以梯形的高度。宽度或在另一种情况下按其宽度。

这也适用于 msoShapeParallelogramm;调整必须乘以 Min(Width;Height)。

这些自选图形中有很多小错误...(例如,msoShapeRegularPentagone 不是正五边形...但是底数是通过将表格的宽度乘以黄金比例减去 1 和“高程”来计算的位于表格左右两侧的点数也等于 GoldenRation 减 1 乘以表格的宽度:结果接近正五边形,但不是)

于 2014-12-24T11:38:51.303 回答
0

我知道这是一个旧线程,但它与我当前的项目相关,我想我会提出我找到的解决方案 - 对于我的项目,我想定义宽度、高度和 TopWidth。这样,传递给调整属性的值是:

shpTrapezoid.Adjustments(1) = (Width - TopWidth)/(2 * Height)

无论哪个更大(高度或宽度),这都应该有效,因为您的 TopWidth 可能总是正数。

于 2017-07-25T14:13:39.837 回答
0

缺乏关于这个主题的自选图形特定文档令人失望,对吧?更令人沮丧的是:自选图形的各种值.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作用。然后,一旦我微调了一组值,我就会将它们粘贴到我正在处理的代码中。

于 2019-08-31T16:03:54.930 回答
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 提供的答案相匹配

于 2021-01-13T11:52:09.183 回答