2012年11月16日金曜日

EXCEL VBA UserForm の画像を切り換えたい

オンオフボタンの、文字の色を変えて動作中の状態を表したいと考えたのがきっかけ。
  1. ボタン色、文字色をオンオフで変える
  2. 文字じゃなくて記号(例えば PLAY/STOP)を使い、同様に色を変える
  3. ボタントップに状態を示すシンボルを貼り付け、切り換えれば適切な表現が可能
1. のボタンの色と、文字色はプロパティの BackColor, ForeColor で切り換えればいい。
2. の場合は、 Webdings Wingdings などのフォントで指定できる。
3. の場合は、ツールボックスからイメージを選択してフォームに貼り付け、
   イメージのプロパティボックス Picture 欄でファイルを指定すればいい。

3. の場合、LoadPicture 関数でコードからオンとオフで切り換えることができる。
ただ、問題点は本体ファイルに、この画像を添付しないならない事。EXCEL ファイルと一体化したい場合、次の方法がある。
  1. シートにシンボルの画像オブジェクトを作成し、コードで呼び出して使う
  2. シートに挿入したシンボル画像を、イメージプロパティの Picture ボックスにドラッグドロップする(ボックスにはメタファイルと表示が残る)
ネットで出てきた 4. の方法はうまくいかなかった。 5. の方法は英語の検索結果にあった方法でこれはお手軽。次のように実現した。
  1. ボタンを透明化しておき、下に二つの画像シンボルを重ねて配置する
  2. ボタンのオンオフで二つの画像を Visibl = True/False で切替える
  3. 画像の形式は、emf  とした。bmp,wmf は、シート上の大きさより小さく表示された
  4. 同時に文字もボタンに記入し、文字色を変える
【注】 EXCEL2003 を使用。画像サイズは画面のDPI 設定とも関係する。