【问题标题】:How to check whether any shape exists?如何检查是否存在任何形状?
【发布时间】:2016-09-07 21:00:36
【问题描述】:

如何检查工作表中是否存在任何形状?

我使用了以下代码:

Sub my()
    Dim shp As Shape
    If Not shp Is Nothing Then
        For Each shp In Sheet1.Shapes
            mesage = shp.TopLeftCell.Address(0, 0)
        Next shp
    Else
        mesage = Sheet1.Cells(1, 12).Address
    End If

End Sub

由于我没有给出形状名称,它正在执行“If-else”循环的“else”部分。

我不能在这里给出形状名称,因为每次形状名称都不一样。

【问题讨论】:

  • If Sheet1.Shapes.Count > 0 then 就足够了。
  • 非常感谢罗里 :)

标签: excel vba


【解决方案1】:

检查任何形状是否存在

如果您想检查活动工作表上是否有任何 VBA Shapes,那么您只需检查Shapes object.Count property 的值即可:

ActiveSheet.Shapes.Count

...这将返回形状的数量,如果没有形状,则返回

示例用法:

If ActiveSheet.Shapes.Count = 0 Then MsgBox "No shapes found!"

检查特定形状是否存在

如果您需要检查是否存在特定形状,请使用此功能:

Function shapeExists(shapeName As String) As Boolean
'returns TRUE if a shape named [ShapeName] exists on the active worksheet
    Dim sh As Shape
    For Each sh In ActiveSheet.Shapes
         If sh.Name = shapeName Then shapeExists = True
    Next sh
End Function

使用示例:

If Not shapeExists("My Shape Name") Then MsgBox "Shape not found!"

列出所有形状

在“立即”窗口中列出活动工作表上的所有形状。 (按 Ctrl+G 打开它。)

Sub ListAllShapes()
'list all shapes on the active worksheet
    Dim sh As Shape
    For Each sh In ActiveSheet.Shapes
        Debug.Print "id=" & sh.ID, "name=" & sh.Name
    Next sh
End Sub

删除所有形状

从活动工作表中删除所有形状。

Sub DeleteAllShapes()
'delete all shapes on the active worksheet (Including CONTROLS, so use with caution!)
    Dim sh As Shape
    For Each sh In ActiveSheet.Shapes
        sh.Delete
    Next sh
End Sub

更多信息:

有关使用 VBA 形状的更多详细信息和示例,请参阅我对其他 形状相关 问题的回答(包括 控件,它们只是另一种形状):

【讨论】:

    猜你喜欢
    • 2021-07-12
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多