Sample Site

ボタンの外観/色を変える処理

VBAプログラムの処理のトリガー(きっかけ)として、ボタンは最も一般的に用いられるアイテム(コントロール)ですが、ある処理を処理の流れに沿って段階的に幾つかのボタンに割り振って処理させる事がよくあります。 その際、順次ボタンを押して処理を進めて、その間に確認や手動処理等して進めてゆくわけですが、何らかの事情で全く別の事を処理したりするうちに、いったいどこまで処理を進めたか迷う場合があります。
このような場合、ボタンを押すとそのボタンの字の表示や色、ボタン自体の色等が変われば直近の処理が確実にわかるようになります。
ここでは、様々なボタンをサンプルにしてその方法を説明します。


vbaでのボタンの種類と特徴には以下があります。
●フォームコントロール
VBAプログラムの処理のトリガーとしてとりあえずはこのボタンを使います。プロパテイが少ないので文字の色と文字自体の変更しか出来ません。 ただ、ボタンを押したときのへこむ動作とかのアクションはしっかりビルトインされています。 ボタンの右クリックメニューの「マクロの登録」で直接標準モジュールのプロシージャを直接リンク出来ます。(下図の「マクロの登録1」参照)

●Activexコントロール
そこそこのプロパテイがあるので、ボタンの色、枠、文字関係の様々な設定、変更が出来ます。 コードは元々シートに紐づけて設定されるので、場合により、そこに記述するか、標準モジュールのプロシージャ を指定する場合はサブルーチンのcallの形で行います。(下図の「マクロの登録2」参照)

●オートShape
元々、シート上に貼り付けられる図形(Shape)は、上の2つに比べ最も外観の自由度の高いオブジェクトです。 ボタンの右クリックメニューの「マクロの登録」で直接標準モジュールのプロシージャを直接リンク出来ます(下図の「マクロの登録3」参照) ただ、上の2つのボタンは最初からトリガーボタンとして、クリックするとへこむ様な動作が組み込まれていますが このShapeはあくまで静的な図形なのでクリックしても動きがありません。
まあ、これに目をつぶってそのままトリガーボタンとして使う事は出来ますが、やはりボタンみたいな動きを させたいのならば、少しそれなりの処理を追加する必要があります。
だたそれには、マウスの左クリックのイベントを捕捉する必要がありますがVBAにはその機能はありません windowsAPIを使えば出来そうですが、まあそこまでやることはないかなと思って、この例ではクリックしたときの ボタンの位置、影の状態等を変えてやることで、なんとなく~ですがボタンを押した様な感じにしています。


各種コントロール図形フォームコントロールactivexコントロール図形(shape)

以下、ボタンの種類による違いを見てゆきます。
フォームコントロールのボタン
共通フォームコントロールのボタン

この例は、3つのフォームコントロールのボタンの各々には、そのボタンが押されたときに、そのオブジェクト名をメイン処理に渡すのみの処理をします。

ボタン1のコード(標準モジュール)


ボタン2のコード(標準モジュール)


ボタン3のコード(標準モジュール)


メイン処理は、ボタンから渡されたオブジェクト名により、そのオブジェクトのテキスト情報を変更する処理をします。 その場合、まず、全てのボタンを初期化してからその処理をします。 ここでは処理を簡素化するためオブジェクト名をSplit関数で配列にしています。
具体的にはボタンはShapes(nameobj)として扱いそのプロパテイの変更で文字の変更を行います。

メイン処理のコード(標準モジュール)



ActiveXコントロールのボタン
共通activexコントロールのボタン

この例は、3つのactivexコントロールのボタンの各々には、そのボタンが押されたときに、そのオブジェクト名をメイン処理に渡すのみの処理をします。 activexボタンは元々、シートモジュールに紐づけされます。

ボタン1のコード(シートモジュール)


ボタン2のコード(シートモジュール)


ボタン3のコード(シートモジュール)


メイン処理は、ボタンから渡されたオブジェクト名により、そのオブジェクトのテキスト情報を変更する処理をします。 その場合、まず、全てのボタンを初期化してからその処理をします。 ここでは処理を簡素化するためオブジェクト名をSplit関数で配列にしています。 ボタンの性状の変更はOLEObjects(bname)として扱い、プロパテイの変更をして行います。

メイン処理のコード(標準モジュール)



図形(Shape)のボタン
共通図形(Shape)のボタン

図形ボタンの場合は、ボタンからコールするのに2種類のサブルーチンがあります。 一つは、ボタンがへこむ動作でもう一つは文字の変更の動作になります。

ボタン1のコード(標準モジュール)


ボタン2のコード(標準モジュール)


ボタン3のコード(標準モジュール)


図形はクリックしても、そのままではなんの変化も起こりません。フォームコントロール、activexコントロールのボタンの様に ボタンを押したときの動き(へこむ、影の動き等々)をさせるためのコードを追加します。 ボタンの現在位置を取得して、ボタンが押された時はその位置を少しずらす事によりいかにもボタンがへこんで見えるような動きをさせます。 それに付随して、ボタンの影もそれらしく見えるようにしています。
押されたら、一定時間で元に戻ります。

ボタンを押したときの動きを付与するコード(標準モジュール)


この部分は、文字の変更なので上記のフォームコントロールのボタンと基本的に同じです。

メイン処理のコード(標準モジュール)



ボタンの処理のまとめ(総まとめ)


以上のTIPSをまとめたファイルです。お時間の無い方におまとめ編です。
上記の3種類のボタンの違いを実際に動かして見てください。



Sample Site