エクセルVBA備忘録 マルチページコントロールをコードから作成する。

家計簿の野菜入力を色別にしたい

エクセルで家計簿を作っていて、野菜、肉、魚などをコンボボックスから選んで入力しています。3か月ほど使うと問題がでました。野菜の項目が増えすぎました。

f:id:bimori466:20200605213206p:plain

画面に収まらないほど大量に…。こんなに種類あるんですね。「食べる投資 ハーバードが教える世界最高の食事術」という本に、「毎日4色の野菜を食べればいい」と書いてありました。なので、入力する際に野菜をすべて網羅的に表示するのではなく、色ごとに表示分けして入力したいと思いました。あと、探すのも大変になってきました。

bimori466.hatenablog.com

マルチページコントロールを使おう!

この問題を解決するために、マルチページを使って作ろう!と考えました。
んで、ネットで調べるわけですが、バスっと書いてあるものが無く苦労したので備忘録を残します。

コードからマルチページ作成

本題です。

今回の設計
1 Userfrom1を作っておく
2 Initializeでマルチページを作成する処理
3 コマンドボタンでテキストボックスを追加

1~3の単純な処理です。ここで強調するのは、このコードの書き方ネットにバスっと無くて面倒だったよってことです。

Userform1フォーム

f:id:bimori466:20200605214638p:plain

得る結果

f:id:bimori466:20200605214944p:plain

マルチページが作成され、コマンドボタンを押すと赤にテキストボックスが作成される。

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変数にすることです。そうすることで、コードで作成したコントロールが保持されます。

これだけですが、調べるのに時間かかったので参考になれば幸いです。
家計簿を改修します!毎日の食物の意識が変わることを願って。

更新記事↓↓

bimori466-1.hatenablog.com