将 Excel 中的形状恢复为默认值

将 Excel 中的形状恢复为默认值

我在工作中使用的规划文档中有大约 70 个形状,一切都很好,但我正在尝试添加一个新功能。这些形状每周使用编辑点进行更改以显示在地图上,但有时形状“A”可能没有被使用,我只想将它与所有其他形状一起恢复为默认大小。有人知道我如何通过宏来实现这一点吗?我尝试了很多方法,到处搜索,但我束手无策……

如果形状不是默认形状,则将所有非默认形状设置为默认大小。

提前致谢

答案1

我不知道 Excel 将形状的默认高度和宽度存储在何处。我假设默认情况下您指的是单击放置而不是拖动到大小时的形状大小。例如,椭圆形是 72x72。正方形也是一样。

一种方法是使用形状的 AlternativeText 属性。您可以将默认大小存储在此属性中。右键单击形状,选择“设置自选图形格式”,转到“Web”选项卡,然后键入 72|72。我使用竖线作为宽度和高度之间的分隔符。您必须弄清楚每种形状的默认大小是多少,但就像我说的,我不知道 Excel 将它存储在哪里。设置完 AlternativeText 属性后,您可以使用如下代码

Sub FixShape()

    Dim shp As Shape
    Dim vaDefault As Variant

    Const sDELIM = "|"

    For Each shp In Sheet1.Shapes
        If Len(shp.AlternativeText) > 0 Then
            vaDefault = Split(shp.AlternativeText, sDELIM)
            shp.Width = vaDefault(0)
            shp.Height = vaDefault(1)
        End If
    Next shp

End Sub

这会将 AlternativeText 中包含内容的每个形状设置为您记录的宽度和高度。这假设您没有将 AlternativeText 用于其他用途。

如果你不想使用 AlternativeText 来存储它,你可以在 VBA 中对值进行硬编码

Sub FixShape2()

    Dim shp As Shape

    Const lDEFOVALHEIGHT As Long = 72
    Const lDEFOVALWIDTH As Long = 72
    Const lDEFSQRHEIGHT As Long = 72
    Const lDEFSQRWIDTH As Long = 72

    For Each shp In Sheet1.Shapes
        Select Case shp.AutoShapeType
            Case msoShapeOval
                shp.Height = lDEFOVALHEIGHT
                shp.Width = lDEFOVALWIDTH
            Case msoShapeRectangle
                shp.Height = lDEFSQRHEIGHT
                shp.Width = lDEFSQRWIDTH
        End Select
    Next shp

End Sub

相关内容