2017年2月21日火曜日

[エクセルVBAメモ]特定の範囲のコマンドボタンのみを削除する方法

ググって探してみたが、期待通りの方法が書かれた解説サイトはなかなか見つからなかった。シート上の「コマンドボタンを全削除」とか「ボタンの名前を指定して削除」は見つかる。だが、ボタンを全部削除されては困るし、特定のボタンの名前を全て削除されるのも大変困る。筆者としては「特定のセル範囲にあるコマンドボタンを全削除」という事を実現したいのだが。

キーワードを何度か変えて粘り強く探してみると、やっと近いものがヒットした(選択したセル範囲に含まれる図形を削除するExcelマクロ)。

上記リンク先にあるコードの図形部分をコマンドボタンに置き換えるだけでほぼ実現出来た。ざっくり言うと

1.削除したいコマンドボタンが含まれるセル範囲を選択状態にする(Range("●:●").select等)
                                   ↓
2.For Each でActiveSheetの図形を一つずつ調べて"選択されているセル範囲と重なっていた場合"にのみコマンドボタンを削除

というなんとも回りくどいやり方で実現した。「こういう方法はそれなりにニーズあるだろうから最初からそういうメソッドを用意しろよMS」とちょっと文句を言いたくなったが、とりあえず実現方法が全く無くてお手上げよりもマシなので良しとしよう。いや、もし実現出来なくても抜本的に仕様を変更してシート上にボタンを直接貼り付けるのではなくユーザーフォーム上で操作するようにする等、工夫すれば他にも色々やり方はあるだろう。「目的は一つでもその実現手段は複数ある」というやつだ。だがそうなると結局他の部分も作り直しになってバグ再発とか新たなバグ発生になる可能性がありテスト工程も含めると工程が増えて完成予定がかなりずれ込むはず。結果論かもしれないが、やはり実現できそうにないと早々に見切りをつけるよりもある程度粘って試行錯誤した方がいいかもしれない。

0 件のコメント:

コメントを投稿