我有一本包含许多形状对象的工作簿。形状包含文本。我正在使用a script来模拟文本搜索。我添加了两个按钮-一个用于“搜索”(运行FindInShape2
),另一个用于“清除”搜索所应用的格式(即运行ResetFont
)。 (我必须在每个循环内添加On Error Resume Next
)。我已经格式化了这些按钮上的文本。我的问题是,“清除”脚本会重置按钮上的格式。
要解决此问题,我正在寻找一种逻辑上为“如果当前形状不是按钮”的测试。
形状对象的局部变量名称为shp
。填充的关键行是:
For Each shp In ActiveSheet.Shapes
我需要
if shp.name not like 'Button%'
请注意,按钮上的显示文本为“查找”和“清除”,但是当我选择按钮时,它们的名称分别为“按钮1”和“按钮2”。
有什么建议吗?开放其他解决方法。
答案 0 :(得分:1)
Marucciboy2的评论使我走上了答案之路。
有效的代码是:
If shp.Type <> 8 Then
除docs on the Shape Type property外,docs on msoShapeType enumeration还将类型值(即数字)与遇到的形状类型的描述进行映射。
在这种情况下,类型8与按钮控件匹配。
作为奖励,以下内容(粗略地)汇总了在遍历ActiveSheet.Shapes
时遇到的形状类型:
Dim sShapeTypes As String
For Each shp In ActiveSheet.Shapes
sShapeTypes = sShapeTypes & ", " & shp.Type
Next
MsgBox sShapeTypes
如果形状很多,则消息框将不包含长消息。您可以使用If
语句排除出现在消息框中的某些语句。
If shp.Type <> 17 Then ' Ignores msoTextBox
sShapeTypes = sShapeTypes & ", " & shp.Type
End If