知識の倉庫の整理 分館

このブログは『知識の倉庫の整理』で投稿された記事の一部を投稿していくサブブログです。『知識の倉庫の整理』では経理やVBA、中小企業診断士、自分の考え等に関する記事を更新しています。 https://www.chishikinosoukonoseiri.com

ExcelVBAのShapesとIf文でシート上のフォームコントロールを無効にする方法

前回のActiveXコントロールと同様に今回はフォームコントロールを無効にする方法についての話です。ExcelVBAでシートを利用して何らかのシステムや簡易的なマクロを作る場合、ボタンなどの1つや2つ設置することもあるかと思います。

 

システム作りを進めていると「こういった場合はユーザーにボタンを押させたくない」とか「こういった場合はユーザーにこのボタンだけを押させたい」といった状況も出てくるでしょう。

 

例えば、処理の流れからある特定のボタンしか押せないようにすることでユーザーを迷わせないようにする、セキュリティ上、ある特定の場合は全てのボタンを押せないようにする、といった状況も考えられます。

 

もちろんフォームモジュールを使ったフォームを使うほうがシステムを作るには楽でしょう。そうは言っても業務の都合上、機能の都合上どうしても「Excelのシート上にフォームコントロールを使ったシステム」を作らざるを得ない場合もあるかもしれません。

 

そういった時に、ExcelVBAのコードでシート上のボタンの押せる押せないを何らかのアクションをトリガーとして切り替えられたら便利です。しかし、「シート上に設置したフォームコントロールを無効にする」ためのコードをインターネット上で調べてみたのですがなかなか見つけられませんでした。

 

フォームモジュールのコントロールを無効にするコードはたくさん見かけるのですが、シート上に設置するフォームコントロールを無効にするコードは見つかりません。自分の探し方が悪かったのかもしれませんが、そもそもシート上に設置したコントロールExcelの仕様上、無効にはできないようです。

 

自分の調べた範囲でそのような文章を何度も目にしたのですが、「何とかしてフォームコントロールを無効にできる方法はないか」と考えていたので色々と試行錯誤してみました。

 

その結果、偶然にも「シート上に設置したフォームコントロールを無効にできる方法」を見つけました。

 

Excelの開発タブから設置するボタンの種類には大きく「フォームコントロール」と「ActiveXコントロール」があり、以下の前回の過去記事ではActiveXコントロールを「使用不可」にするコードについて説明しました。

 

今回はシート上に設置したフォームコントロールをShapesとIf文を使って無効にできる方法について説明していきます。

 

続きはこちら