概要
GetShapeByNameは、指定したワークシートから、指定名のShapeを取得する汎用関数です。図形が見つからない場合はエラーで止めず、Nothingを返します。
選択セルに追従する増減ボタンでは、「減少ボタン」「増加ボタン」が既に存在するかを確認するために使っています。
使う場面
- 図形ボタンを名前で取得したい
- 図形が存在しない場合でもマクロを止めたくない
- 図形の作成済み判定をしたい
Application.Callerで取得した図形名からShapeを取りたい
使用例
Dim shp As Shape
Set shp = GetShapeByName(ActiveSheet, "増加ボタン")
If shp Is Nothing Then
MsgBox "対象の図形が見つかりません"
Else
shp.Visible = msoTrue
End If
コピー可能な実装コード
GetShapeByName.bas
vba
コードを読み込み中...初心者向けコード解説
Sheet.Shapes(ShapeName)は、指定名の図形が存在しない場合にエラーになります。そこでOn Error Resume Nextで一時的にエラーを無視し、取得できなければOutputはNothingのままにしています。
取得後はOn Error GoTo 0で通常のエラー処理に戻します。この戻し忘れをすると、後続処理のエラーまで無視してしまうため注意が必要です。
関連記事
注意点
Sheetには、対象図形が存在するワークシートを渡します。- 図形名が重複しない前提で使います。
- 見つからない場合は
Nothingが返るため、呼び出し側で必ず確認します。 On Error Resume Nextは関数内ですぐ解除し、後続処理のエラーを隠さないようにします。
軽いまとめ
GetShapeByNameを用意しておくと、図形名での取得と存在チェックを1行で扱えます。図形ボタンを使うExcelツールでは、かなり再利用しやすい小さな部品です。
