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オブジェクトで操作対象の特定もできます。
しかし、操作対象が図形・画像の場合、こうしたイベントは発生しないのです。マクロが発動した後で元をたどるしかないというわけです。
このマクロを応用した例がこちらです。
