【问题标题】:Microsoft Excel 2010 Autoshape "Adjustments" Property (msoShapeTrapezoid)Microsoft Excel 2010 Autoshape“调整”属性 (msoShapeTrapezoid)
【发布时间】:2012-08-23 12:25:31
【问题描述】:

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

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

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

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

shpTrapezoid.Adjustments(1) = ValueX

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

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

【问题讨论】:

  • 你见过这个吗?如果没有,它有帮助吗? msdn.microsoft.com/en-us/library/office/…>
  • 谢谢,我没有看到,但它并没有真正的帮助。从该信息看来,msoShapeTrapezoid 的线性调整应该从0 运行到0.5(即矩形-> 极端的三角形)但我尝试在录制宏时拖动手柄并且值过多0.5。

标签: excel excel-2010 vba


【解决方案1】:

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

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

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

所以如果要绘制梯形,调整必须这样计算:梯形的顶部减去底部,结果除以2,如果高度为,则新结果除以梯形的高度小于其宽度或在其他情况下小于其宽度。

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        如果它将来可能对任何人有所帮助,这是我添加梯形的方法

        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 提供的答案相匹配

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-02-26
          • 1970-01-01
          • 2011-05-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多