我在工作中使用的规划文档中有大约 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