测试形状是否为特定形状,即按钮

时间:2018-10-24 01:38:05

标签: excel vba excel-vba

我有一本包含许多形状对象的工作簿。形状包含文本。我正在使用a script来模拟文本搜索。我添加了两个按钮-一个用于“搜索”(运行FindInShape2),另一个用于“清除”搜索所应用的格式(即运行ResetFont)。 (我必须在每个循环内添加On Error Resume Next)。我已经格式化了这些按钮上的文本。我的问题是,“清除”脚本会重置按钮上的格式。

要解决此问题,我正在寻找一种逻辑上为“如果当前形状不是按钮”的测试。

形状对象的局部变量名称为shp。填充的关键行是:

For Each shp In ActiveSheet.Shapes

我需要

if shp.name not like 'Button%'

请注意,按钮上的显示文本为“查找”和“清除”,但是当我选择按钮时,它们的名称分别为“按钮1”和“按钮2”。

有什么建议吗?开放其他解决方法。

1 个答案:

答案 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