図形や画像をクリックすることで登録したマクロ呼び出すことができます。Application.Caller
は、その呼び出し元をたどることができる便利なプロパティです。
なぜ便利なのかというと、一つのマクロを複数の図形・画像に登録することで次のようなことができるからです。
呼び出し元の図形・画像に応じて異なる処理を行う
呼び出し元の図形・画像自体を処理する(ほかの図形・画像は処理しない)
Application.Caller プロパティで呼び出し元の図形・画像を取得する
Dim nameShp As String Dim oShp As Shape On Error Resume Next nameShp = Application.Caller If Err.Number <> 0 Then Exit Sub On Error GoTo 0 Set oShp = ActiveSheet.Shapes(nameShp)
Application.Caller プロパティの値
図形・画像から呼び出されると、Application.Caller
は図形・画像の名前を返します。
[マクロ]ダイアログボックスなどから直接実行された場合は #REF!
が返ります。上記コードではString
型に対してエラーになるので、On Error
で処理をスキップするようにしています。
図形・画像の操作とイベント
ユーザーが特定箇所を操作したらマクロ処理をするような場合、通常はイベントプロシージャを利用します。ダブルクリック(SheetBeforeDoubleClick
)や右クリック(SheetBeforeRightClick
)を捕捉して、Target
オブジェクトで操作対象の特定もできます。
しかし、操作対象が図形・画像の場合、こうしたイベントは発生しないのです。マクロが発動した後で元をたどるしかないというわけです。
このマクロを応用した例がこちらです。