ExcelVBAで何らかのシステムを作る場合、フォームを利用する人もいればシートを利用する人もいるかと思います。シートを利用する場合、何かの動作の起点として「コマンドボタン」などのボタンをシート上に設置して、そのボタンを押すことでコードの内容を実行させるでしょう。
システム作りを進めていると「こういった場合はユーザーにボタンを押させたくない」とか「こういった場合はユーザーにこのボタンだけを押させたい」といった状況も出てくるのではないでしょうか。
例えば、処理の流れからある特定のボタンしか押せないようにすることでユーザーを迷わせないようにするとか、セキュリティ上、ある特定の場合は全てのボタンを押せないようにする、といった状況も考えられます。
そういった時に、ExcelVBAのコードでシート上のボタンを押せないように出来たら便利でしょう。しかし、「シート上に設置したボタンを使用不可にする」ためのコードをインターネット上で調べてみたのですがなかなか見つけられませんでした。
フォームを利用した場合のコントロールを使用不可にするコードはたくさん見かけるのですが、シート上に設置するコントロールを使用不可にするコードが見つけられないんです。
自分の探し方が悪かったのかもしれませんが、そもそも「シート上に設置したコントロール(ボタン等のこと)は使用不可にはできない」という言葉をよく見かけました。「それはExcelの仕様上できない」と。
そういった文章を自分の調べた範囲で何度も目にしたのですが、そうは言ってもその時は「何とかしてボタンをユーザーが使えないようなシステムを作らなければならない」という状況だったので色々と試行錯誤してみました。
その結果偶然にも「シート上に設置したボタンを使用不可にできるコード」を見つけたので、このことについて今回は整理していってみます。
もう一度確認しておきますが、フォームモジュールに設置するボタンではなく、シート上に設置するボタンを使用不可にする方法になります。