作成日 2006/1/8
最終更新日 2006/4/16

エクセルVBAで最小化ボタンを作る。

ここではフォームの高さを小さくするボタン(※1)を作ろうと思います。(※2)

※1:カラーボタンやカラーパレットでは、複数のコントロールを1つのコントロールとして扱いたいので
クラスモジュールを使用してきましたが、このボタンはそうではありません。
だったら、クラス化しなくていいのかというと、そんな事はないです。
クラス化する事によって、再利用が可能となるからです。
※2:なんで、こんなの、作ったのかって?
欲しいから。

1.具体的にどんなのものを作るの?
2.クラスの説明
3.ダウンロードして使ってみる

1.具体的にどんなのものを作るの?

 図1を見て。

最小化ボタンの説明
図1 最小化ボタン

 「たたむ」ボタンをクリックすると、今現在のフォームの高さを記憶した後、高さを小さくします。
 「広げる」ボタンをクリックすると、フォームの高さを戻します。
 ※ボタンをクリックするとフォームのResizeイベント(ボタンをフレームに貼付けた場合はLayoutイベント)が発生します。

このページのトップへ

2.クラスの説明

 主なプロパティは以下の通り

プロパティ名
プロパティの説明
State
今、フォーム(正確にはボタンを貼付けたコンテナ)が折り畳まれている状態かどうか。(読み取り専用)
0:折り畳まれていない
1:折り畳まれている
Height
ボタンの高さ(面倒くさかったので読み取り専用)
Width
ボタンの幅(面倒くさかったので読み取り専用)
Caption
ボタンに表示されている文字列(読み取り専用)
"たたむ"か"広げる"のどっちか。
Top
ボタンの左上のy座標(※1)
Left
ボタンの左上のx座標(※1)
Enabled
ボタンが押下可能かどうか。(add時はTrue(押下可能)。)
Visible
ボタンの表示状態。(add時はTrue(表示状態)。)
※1:ボタンの位置(TopとLeft)ですが、add時はフォーム(正確にはボタンを貼付けたコンテナ)の右上です。
add後にコンテナの大きさが変わっても、ボタンの位置(TopとLeft)は変わりません。(※2)
※2:え、コンテナの大きさが変わったときに、なんでTopとLeftの値を自動で変更するようにしないのかだって?
答えは「できないから。(Excel X for MacとExcel 97(※Windows版です。)の場合です。Excel 2003(※Windows版です。)ではできました)」
もう少し詳しく言うと、クラスモジュール内の先頭で、
Private WithEvents m_objForm As MSForms.Userform
と宣言すれば、クラスモジュールでコンテナオブジェクトであるユーザフォームのイベントを処理できるはずです。
しかし、ここで宣言したオブジェクト変数m_objFormにUserformオブジェクトへの参照を代入しようとしたときに、
430番の実行時エラーが発生してしまいます。



 作成するメソッドは以下の通り

メソッド名
メソッドの説明
Add
最小化ボタンをコンテナオブジェクトに貼付ける。
※既に貼付けていた場合や、引数が不正だった場合はエラーとし、貼付けはしない。
Delete
最小化ボタンをコンテナオブジェクトから削除する。
※既に削除済みの場合は何もしない。


このページのトップへ

3.ダウンロードして使ってみる

マクロ(ver.1.1)

 読み取り専用のプロパティがありますが、暇があったら(というより必要が出てきたら)
設定も出来るようにします。
Prev Up Next  Top
このページのトップへ

このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方はメールをお願いします。

Microsoft 、Windows 、Visual Basic および Excel は米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
ここではExcel® をエクセル、Visual Basic® for Applications をVBAと表記する場合があります。
Mac 、Mac OS 、Mac OS X は米国Apple Computer,Inc.の登録商標または商標です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。

このホームページの作成者はこれらの会社とはいっさい関係がありません。