0

如何在不使用Application.Caller? 的情况下检索单击以运行宏的形状。它的名称或形状本身作为一个对象。

我不能使用Application.Caller,因为如果形状名称大于 30 个字符,它只会检索前 30 个字符。

也许有一个 API 可以检索 Sape 对象?

编辑:

  1. 我不想在表格中循环形状。循环遍历工作簿中的所有形状需要太多时间。
  2. 我无法重命名形状。

谢谢

4

1 回答 1

2

您可以重命名工作表中的形状对象吗?

Private Sub Workbook_Open()
Dim shp As shape
Dim i As Integer

For Each shp In ThisWorkbook.Sheets(1).Shapes
    shp.Name = "Shape" & Format(i, "0000")
    i = i + 1
Next shp
End Sub

或者,您可以手动设置每个形状的 .OnAction 属性以将形状名称传递给您的函数:

Sub RenameShapes2()

    Dim shp As shape
    Dim i As Integer

    For Each shp In ThisWorkbook.Sheets(1).Shapes
        shp.name = "Shape" & "abcdefghijklmnopqrstuvwxyz0123456789_" & Format(i, "0000")
        shp.OnAction = "'userFunction """ & shp.name & """'"
        i = i + 1
    Next shp

End Sub


Sub userFunction(name As String)
    MsgBox name
End Sub 

这允许您拥有长度超过 30 个字符的形状名称。虽然有点丑

于 2012-09-25T16:36:54.300 回答