知識の倉庫の整理はてなブログからワードプレスに引っ越しました。ここでは中小企業診断士の勉強記や経理、派遣社員として働いて気づいたこと、その他にプログラミング関連やVBAについて思ったことを書いています。現在はJavaScriptを勉強中。VBAJavaScript自己紹介サイトマップExcelVBAでシートのActiveXコントロールの文字色と背景色を変更する方法2019.02.12インターネットを調べてみるとわかったんですが、これもありそうでなかったんですよね。それはExcelのシート上で使う「ActiveXコントロールの文字色と背景色を変更する方法」です。以下の過去記事ではシートにあるフォームコントロールのボタンの文字色を変更する方法について書きました。ExcelVBAでシートにあるフォームコントロールのボタンの文字色を変更する方法どうせだったらActiveXコントロールについても備忘録的に整理してしまった方が良いと思ったのと、状況によってはそういった機能も必要な時があるのではないかと思いました。Excelで「文字色」や「背景色」の変更というと、通常は「セル」か「ユーザーフォームのコントロール」になってくると思います。実際インターネット上でもそれらの文字色や背景色を変更するためのコードの情報はたくさん検索することができます。前回書いたフォームコントロールもそうですが、Excelのシート上で使われる「ActiveXコントロール」の「文字色」や「背景色」の変更方法についてのまとまった情報は見つけられませんでした。そのため今回は、前回の記事の都合も兼ねてActiveXコントロールの文字色や背景色の変更方法について整理していってみます。目次ExcelVBAでシートのActiveXコントロールの文字色と背景色を変更するコード今回のコードについての注意点まとめあわせて読みたいExcelVBAでシートのActiveXコントロールの文字色と背景色を変更するコード結論としては次のコードになります。以下のコードの動作を確認した環境はExcel2013になります。Sub順番にコードの解説をしていきます。Each...Nextステートメントでシート上にあるActiveXコントロールのコマンドボタンを順番に見ていきます。その中でコマンドボタンの「文字色」と「背景色」を変えていく、というコードになります。詳しく見ていくと、2行目で変数cを宣言。Sheets(“Sheet3”).OLEObjectsから、まず「Sheet3」シートを指します。そのシート上にあるActiveXコントロールを変数cに順番に格納していきます。Thenで、変数cに格納したActiveXコントロールからNameプロパティで名前を取得、その名前が「CommandButtonという文字列で始まる」ものであれば、If文以下の処理を実行する、という条件文になります。0)のSheets(“Sheet3”)から、まず「Sheet3」シートを指します。次のOLEObjects(c.Name).Objectから、c.Name(今回の記事では名前が「CommandButtonで始まる」ActiveXコントロールを指す)に該当するActiveXコントロールを指定。0)で指定したActiveXコントロール(コマンドボタン)の文字色を黄色に変更します。0)の中の.BackColorからActiveXコントロールのコマンドボタンの背景色を緑色に変更します。IfでIf文の条件の終了。cで変数cに格納するActiveXコントロールを変えていく、というコードになります。今回のコードをExcelのシートに標準搭載されている次の11種類のActiveXコントロールで試してみました。ToggleButtonその結果、背景色の変更は全てのActiveXコントロールでできました。文字色の変更はイメージコントロールではできませんでした。この理由としては、そもそもイメージコントロールは「画像」などのイメージを扱うコントロールであって、文字を使える箇所がないためと考えられます。したら手違いもあるかもしれませんが、今回実験してみて全てのActiveXコントロールの背景色を変更できたのと、イメージ以外の文字色を変更できたのは驚きました。いうのも、文字色や背景色を変更できるのはセルの部分かユーザーフォームで使われるコントロールだけだと思ったからです。確認してみるものです。まとめ今回はExcelのシート上で使うActiveXコントロールについて、文字色と背景色が変更できるかどうかをコードを通して確認しました。実はコード以外でも文字色と背景色を変更できる箇所があります。リボンの「デザインモード」をクリック後、どれでもいいのでシート上にあるActiveXコントロールを選択します。選択したActiveXコントロールを右クリック後に表示される「プロパティ」をクリックすると、VBEのプロパティウィンドウのようにActiveXコントロールのプロパティの一覧が表示されます。このプロパティウィンドウの「ForeColor」の欄から、そのコントロールの「文字色」、「BackColor」の欄から「背景色」を変更することはできます。コード上でActiveXコントロールの文字色と背景色を変更するためのまとまった情報をインターネット上で見つけることは残念ながらできませんでした。考えられる理由としては、「ユーザーフォーム」の方が使い勝手が良いし用途も幅広いのだから面倒なコードを考えなくてもいいのではないか、ユーザーフォームがあるのだから需要的にあまり必要とされていないかもしれない、というのもあると思います。ひとつは「そもそも最初からできない」というイメージがあるのかもしれません。インターネット上では、シートに設置するコントロールは仕様的に無効にできない=そのコントロールのプロパティは全面的に操作できない、といったイメージが持たれてしまったのではないでしょうか。最初からシートに設置するフォームコントロール、ActiveXコントロールの文字色や背景色を変更することも無理だろう、という風に考えてしまうユーザーも多くなってしまったのではないかと思います。「ForeColor」とか「BackColor」とかそのキーワードだけに関する使い方に関してはインターネット上で多くの情報を探し出すことが出来ます。今回のように「ForeColor」+「ActiveXコントロール」+「α」みたいなもう少しまとまっと情報を知りたいと思っても、今回のような情報はインターネット上で調べてもなかなか見つかりません。いった「いろんなケースを想定した場合でのコード」がもっと簡単に調べられれば仕事が楽になるのですが、このような部分は自分で整理していく必要がありそうです。コメントをキャンセルメールアドレスが公開されることはありません。