【问题标题】:Trying to adjust size of shapes in VBA script but cannot get to size precisely尝试在 VBA 脚本中调整形状的大小,但无法精确调整大小
【发布时间】:2023-04-01 19:53:01
【问题描述】:

我发现在 Excel 中调整形状的大小非常令人沮丧。出于某种原因,当我调整高度时,宽度会调整为某个随机数,反之亦然。我没有锁定纵横比,并且勾选了 Don't move or size with cells。形状是圆形,我正在尝试将它们格式化为具有相等的高度和宽度(12 x 12)

认为这是由于 Format Shape 控件中的一些错误,我编写了一个非常简单的脚本来遍历工作表中的所有形状并更正它们的属性,但同样的问题仍然存在。

Sub FixButFormat()
    Dim sh As Shape
    For Each sh In ActiveSheet.Shapes
        sh.Select
        Selection.ShapeRange.LockAspectRatio = msoFalse
        Selection.ShapeRange.Height = 12
        Selection.ShapeRange.Width = 12
        Selection.Placement = xlMove
        Selection.ShapeRange.LockAspectRatio = msoTrue
    Next sh
End Sub

【问题讨论】:

  • 您的代码是否按预期工作?如果不是,那是什么问题?
  • 不需要选择任何东西,不要使用ShapeRange属性。使用形状尺寸、属性...

标签: vba formatting resize shapes


【解决方案1】:

请尝试下一个代码:

Sub FixButFormat()
 Dim sh As Shape
    For Each sh In ActiveSheet.Shapes
        With sh
            .LockAspectRatio = msoFalse
            .height = 12
            .width = 12
            .placement = xlMove
            .LockAspectRatio = msoTrue
        End With
    Next sh
End Sub

但是,如果形状是圆形,是否有可能不再是圆形?我的意思是在两个轴上具有相同的尺寸。否则只修改一维就够了,保持LockAspectRatio = msoTrue...

【讨论】:

  • @Munki Fisht:你有时间测试上面的代码吗?它没有按您的需要工作吗?
  • 嗨@FaneDuru - 感谢您的回复,但不幸的是代码不起作用在大多数情况下,暗淡仍会更改为指定的 12 pt 附近的一些随机值。例如,我第一次运行它从 11.4 更改为 12.15,然后另一个实例宽度可能更改为 12.3,并且当宽度发生时高度也会更改。我认为这可能是因为 Excel 中有一些网格会根据位置强制特定的暗淡,所以我将形状移动到 Left, Top = 0, 0 然后在缩放完成后重新定位,但这也没有工作。
  • @Munki Fisht:你能分享你使用的工作簿吗?在我的安装上完全可以正常工作。如果您的工作簿中有机密内容,请构建一个虚拟的并尝试在传输站点上共享它。 Here它是免费的,易于使用。当经过测试的代码没有返回您需要的内容时,这至少是礼貌的,但为了您的利益,请发送一些反馈,告诉您哪些行为不符合您的需要......
猜你喜欢
  • 2014-12-02
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多