如何在不使用Application.Caller
? 的情况下检索单击以运行宏的形状。它的名称或形状本身作为一个对象。
我不能使用Application.Caller
,因为如果形状名称大于 30 个字符,它只会检索前 30 个字符。
也许有一个 API 可以检索 Sape 对象?
编辑:
- 我不想在表格中循环形状。循环遍历工作簿中的所有形状需要太多时间。
- 我无法重命名形状。
谢谢
您可以重命名工作表中的形状对象吗?
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 个字符的形状名称。虽然有点丑