エクセルVBA備忘録 マルチページコントロールをコードから作成する。
家計簿の野菜入力を色別にしたい
エクセルで家計簿を作っていて、野菜、肉、魚などをコンボボックスから選んで入力しています。3か月ほど使うと問題がでました。野菜の項目が増えすぎました。
画面に収まらないほど大量に…。こんなに種類あるんですね。「食べる投資 ハーバードが教える世界最高の食事術」という本に、「毎日4色の野菜を食べればいい」と書いてありました。なので、入力する際に野菜をすべて網羅的に表示するのではなく、色ごとに表示分けして入力したいと思いました。あと、探すのも大変になってきました。
マルチページコントロールを使おう!
この問題を解決するために、マルチページを使って作ろう!と考えました。
んで、ネットで調べるわけですが、バスっと書いてあるものが無く苦労したので備忘録を残します。
コードからマルチページ作成
本題です。
今回の設計
1 Userfrom1を作っておく
2 Initializeでマルチページを作成する処理
3 コマンドボタンでテキストボックスを追加
1~3の単純な処理です。ここで強調するのは、このコードの書き方ネットにバスっと無くて面倒だったよってことです。
Userform1フォーム
得る結果
マルチページが作成され、コマンドボタンを押すと赤にテキストボックスが作成される。
Initialize処理コード
'Public変数 Dim foodMultiPage As MSForms.MultiPage Dim MyTextBox As MSForms.TextBox Private Sub UserForm_Initialize() 'マルチページを作成 Set foodMultiPage = Me.Controls.Add("Forms.MultiPage.1") 'ページのCaptionを変更 foodMultiPage.Pages.Item(0).Caption = "赤" foodMultiPage.Pages.Item(1).Caption = "黄" 'ページを追加 foodMultiPage.Pages.Add ("白") 'ページの位置を、高さ50。 foodMultiPage.Top = 50 End Sub
コマンドボタンでマルチページにテキストボックスを作る。
Private Sub kkkk_Click() ' ページ(0)にテキストボックスを追加 Set MyTextBox = foodMultiPage.Pages(0).Controls.Add("Forms.TextBox.1", "MyTextBox", 1) End Sub
以上です。ポイントは、マルチページ用の変数foodMultiPageをPublic変数にすることです。そうすることで、コードで作成したコントロールが保持されます。
これだけですが、調べるのに時間かかったので参考になれば幸いです。
家計簿を改修します!毎日の食物の意識が変わることを願って。