0

?を使用せずに、マクロを実行するためにクリックされた形状を取得するにはどうすればよいApplication.Callerですか。その名前またはオブジェクトとしての形状自体。

Application.Callerシェイプ名が 30 文字を超える場合、最初の 30 文字しか取得できないため、使用できません。

Sape オブジェクトを取得できる API があるのではないでしょうか?

編集:

  1. シートで形状をループしたくありません。ブック内のすべての図形をループすると、時間がかかりすぎます。
  2. シェイプの名前を変更できません。

ありがとう

4

1 に答える 1

2

Worksheet の Shape オブジェクトの名前を変更できますか?

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 に答える