今までユーザーフォームに配置するコマンドボタン等のコントロール類は ユーザーフォームの作成時に全てきっちり配置していました。
というかその方法しか知らなかった。
ところがコントロール類はユーザーフォームのイベントと連動して動的に、 しかも簡単に配置できる事を知ったのその備忘録。
まずはユーザーフォームを作成してコマンドボタンを1つ設置。
このボタンをクリックする度にコマンドボタンを追加するようにしました。
ユーザーフォームのコードは以下の通り。
Option Explicit Dim myCol As Collection Dim myCls As Class1 Private Sub UserForm_Initialize() Set myCol = New Collection End Sub Private Sub CommandButton0_Click() Dim myCmdBtn As MSForms.CommandButton Set myCmdBtn = UserForm1.Controls.Add("Forms.CommandButton.1", "CommandButton" & myCol.Count + 1, True) With myCmdBtn .Left = 10 .Top = 10 + 20 * myCol.Count .Width = 150 .Caption = "CommandButton" & myCol.Count + 1 End With Set myCls = New Class1 myCls.setBtn myCmdBtn myCol.Add myCls End Sub
この内、動的にボタンを追加しているのは Set myCmdBtn = UserForm1.Controls.Add(“Forms.CommandButton.1”, “CommandButton” & myCol.Count + 1, True) の部分です。 追加したいフォームのコントロールコレクションに、追加したいコントロールを指定してやれば、フォームにコントロールが追加されます。
第1引数のコントロールを指定する文字列は以下の通り。
作成するコントロール | 使用する ID |
---|---|
チェック ボックス (CheckBox) | Forms.CheckBox.1 |
コンボ ボックス (ComboBox) | Forms.ComboBox.1 |
コマンド ボタン (CommandButton) | Forms.CommandButton.1 |
フレーム (Frame) | Forms.Frame.1 |
イメージ (Image) | Forms.Image.1 |
ラベル (Label) | Forms.Label.1 |
リスト ボックス (ListBox) | Forms.ListBox.1 |
マルチ ページ (MultiPage) | Forms.MultiPage.1 |
オプション ボタン (OptionButton) | Forms.OptionButton.1 |
スクロール バー (ScrollBar) | Forms.ScrollBar.1 |
スピン ボタン (SpinButton) | Forms.SpinButton.1 |
タブ ストリップ (TabStrip) | Forms.TabStrip.1 |
テキスト ボックス (TextBox) | Forms.TextBox.1 |
トグル ボタン (ToggleButton) | Forms.ToggleButton.1 |
イベントの登録
動的に配置したボタンにはイベントが登録されていないので、このままではただの飾りになってしまう。
クラスを作成して以下のようなコードを登録
クラスを作成して以下のようなコードを登録 Option Explicit Private WithEvents myCmdBtn As MSForms.CommandButton Private Sub myCmdBtn_Click() MsgBox myCmdBtn.Caption End Sub Sub setBtn(Cmdbtn As MSForms.CommandButton) Set myCmdBtn = Cmdbtn End Sub
witheventsキーワードを付けて変数を宣言すると、 変数の型でしているコントロールのイベントを認識することが出来ます。 この場合はCommandbuttonを指定しているのでコマンドボタンの各種イベントを 認識するクラスが作成されます。
参考記事
久しぶりに読み返してみたら、昔は読み飛ばしたであろう今回の内容を発見した。

かんたんプログラミング Excel2003 VBA コントロール・関数編
- 作者: 大村あつし
- 出版社/メーカー: 技術評論社
- 発売日: 2004/04
- メディア: 単行本
- 購入: 1人 クリック: 14回
- この商品を含むブログ (4件) を見る
イベントの共通化について。 thom.hateblo.jp