ExcelVBAでシートのActiveXコントロールの文字色と背景色を変更する方法

インターネットを調べてみるとわかったんですが、これもありそうでなかったんですよね。それはExcelのシート上で使う

「ActiveXコントロールの文字色と背景色を変更する方法」です。

 

以下の過去記事ではシートにあるフォームコントロールのボタンの文字色を変更する方法について書きました。

 

どうせだったらActiveXコントロールについても備忘録的に整理してしまった方が良いと思ったのと、状況によってはそういった機能も必要な時があるのではないかと思いました。

 

Excelで「文字色」や「背景色」の変更というと、通常は「セル」か「ユーザーフォームのコントロール」になってくると思います。実際インターネット上でもそれらの文字色や背景色を変更するためのコードの情報はたくさん検索することができます。

 

しかし前回書いたフォームコントロールもそうですが、Excelのシート上で使われる「ActiveXコントロール」の「文字色」や「背景色」の変更方法についてのまとまった情報は見つけられませんでした。

 

そのため今回は、前回の記事の都合も兼ねてActiveXコントロールの文字色や背景色の変更方法について整理していってみます。

ExcelVBAでシートのActiveXコントロールの文字色と背景色を変更するコード

結論としては次のコードになります。以下のコードの動作を確認した環境はExcel2013になります。

Sub ActiveXコントロールの文字色と背景色を変更()
Dim c
For Each c In Sheets("Sheet3").OLEObjects
   If c.Name Like "CommandButton*" Then
      'ボタンの文字色を黄色に変更
      Sheets("Sheet3").OLEObjects(c.Name).Object.ForeColor = RGB(255, 255, 0)
      'ボタンの背景色を緑色に変更
      Sheets("Sheet3").OLEObjects(c.Name).Object.BackColor = RGB(0, 204, 0)
   End If
Next c
End Sub

順番にコードの解説をしていきます。概要としては、For Each…Nextステートメントでシート上にあるActiveXコントロールのコマンドボタンを順番に見ていきます。その中でコマンドボタンの「文字色」と「背景色」を変えていく、というコードになります。

 

もう少し詳しく見ていくと、2行目で変数cを宣言。3行目のFor Each c In Sheets(“Sheet3”).OLEObjectsから、まず「Sheet3」シートを指します。そのシート上にあるActiveXコントロールを変数cに順番に格納していきます。

 

4行目のIf c.Name Like “CommandButton*” Thenで、変数cに格納したActiveXコントロールからNameプロパティで名前を取得、その名前が「CommandButtonという文字列で始まる」ものであれば、If文以下の処理を実行する、という条件文になります。

 

6行目のSheets(“Sheet3”).OLEObjects(c.Name).Object.ForeColor = RGB(255, 255, 0)のSheets(“Sheet3”)から、まず「Sheet3」シートを指します。

 

次のOLEObjects(c.Name).Objectから、c.Name(今回の記事では名前が「CommandButtonで始まる」ActiveXコントロールを指す)に該当するActiveXコントロールを指定。.ForeColor = RGB(255, 255, 0)で指定したActiveXコントロール(コマンドボタン)の文字色を黄色に変更します。

 

8行目のSheets(“Sheet3”).OLEObjects(c.Name).Object.BackColor = RGB(0, 204, 0)の中の.BackColorからActiveXコントロールのコマンドボタンの背景色を緑色に変更します。

 

9行目のEnd IfでIf文の条件の終了。10行目のNext cで変数cに格納するActiveXコントロールを変えていく、というコードになります。

今回のコードについての注意点

今回のコードをExcelのシートに標準搭載されている次の11種類のActiveXコントロールで試してみました。

ActiveXコントロールの種類コントロール名
コマンドボタンCommandButton
コンボボックスComboBox
チェックボックスCheckBox
リストボックスListBox
テキストボックスTextBox
スクロールバーScrollBar
スピンボタンSpinButton
オプションボタンOptionButton
ラベルLabel
イメージImage
トグルボタンToggleButton

その結果、背景色の変更は全てのActiveXコントロールでできました。一方文字色の変更はイメージコントロールではできませんでした。この理由としては、そもそもイメージコントロールは「画像」などのイメージを扱うコントロールであって、文字を使える箇所がないためと考えられます。

 

もしかしたら手違いもあるかもしれませんが、今回実験してみて全てのActiveXコントロールの背景色を変更できたのと、イメージ以外の文字色を変更できたのは驚きました。

 

というのも、文字色や背景色を変更できるのはセルの部分かユーザーフォームで使われるコントロールだけだと思ったからです。やはり色々と確認してみるものです。

まとめ

今回はExcelのシート上で使うActiveXコントロールについて、文字色と背景色が変更できるかどうかをコードを通して確認しました。実はコード以外でも文字色と背景色を変更できる箇所があります。

 

リボンの「デザインモード」をクリック後、どれでもいいのでシート上にあるActiveXコントロールを選択します。選択したActiveXコントロールを右クリック後に表示される「プロパティ」をクリックすると、VBEのプロパティウィンドウのようにActiveXコントロールのプロパティの一覧が表示されます。

 

このプロパティウィンドウの「ForeColor」の欄から、そのコントロールの「文字色」、「BackColor」の欄から「背景色」を変更することはできます。

 

けれども、コード上でActiveXコントロールの文字色と背景色を変更するためのまとまった情報をインターネット上で見つけることは残念ながらできませんでした。

 

考えられる理由としては、「ユーザーフォーム」の方が使い勝手が良いし用途も幅広いのだから面倒なコードを考えなくてもいいのではないか、ユーザーフォームがあるのだから需要的にあまり必要とされていないかもしれない、というのもあると思います。

 

もうひとつは「そもそも最初からできない」というイメージがあるのかもしれません。インターネット上では、シートに設置するコントロールは仕様的に無効にできない=そのコントロールのプロパティは全面的に操作できない、といったイメージが持たれてしまったのではないでしょうか。

 

だから、最初からシートに設置するフォームコントロール、ActiveXコントロールの文字色や背景色を変更することも無理だろう、という風に考えてしまうユーザーも多くなってしまったのではないかと思います。

 

「ForeColor」とか「BackColor」とかそのキーワードだけに関する使い方に関してはインターネット上で多くの情報を探し出すことが出来ます。一方今回のように「ForeColor」+「ActiveXコントロール」+「α」みたいなもう少しまとまっと情報を知りたいと思っても、今回のような情報はインターネット上で調べてもなかなか見つかりません。

 

こういった「いろんなケースを想定した場合でのコード」がもっと簡単に調べられれば仕事が楽になるのですが、このような部分は自分で整理していく必要がありそうです。

あわせて読みたい

こんな記事も読まれています

コメント