質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1808閲覧

ボタンを押してフォームのコントロールを増やしたい。

ice930

総合スコア99

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/11/16 21:56

編集2020/11/19 00:13

以下の様なフォームを作りました。
イメージ説明
下の「項目追加」ボタンをクリックした場合に「内容」というラベルとテキストボックスをボタンを押した数だけ増やしたいです。

Sub UserForm_Initialize() Dim adbtn As CommandButton Set Refbtn = .Controls.Add("Forms.CommandButton.1", "ad", True) With NForm With adbtn '反映ボタン .Top = 178 .Left = 20 .Height = 20 .Width = 300 .Caption = "項目追加" End With 'ここに以下の項目を追加 With .Controls.Add("Forms.Label.1", "LEX", True) 'ジャンル .Top = 142 'Top位置(表示位置を移動する) .Left = 10 'Left位置 .Height = 20 '高さ .Width = 50 '幅 .BackColor = 25 '背景色 .BackStyle = 0 .ForeColor = 1 '文字色 .Font.Name = "メイリオ" 'テキストのスタイル .TextAlign = 2 'テキストの位置 .FontSize = 16 'テキストのサイズ .Caption = "内容" End With With .Controls.Add("Forms.TextBox.1", "TEX", True) 'ジャンルラベル .Top = 132 .Left = 70 'Left位置 .Height = 40 '高さ .Width = 250 '幅 .BorderStyle = fmBorderStyleSingle '枠線 .BackColor = RGB(255, 255, 255) '背景色 .ForeColor = RGB(0, 0, 0) '文字色 .Font.Name = "メイリオ" 'テキストのスタイル .TextAlign = 2 'テキストの位置 .FontSize = 10 'テキストのサイズ .Text = expa '表示のテキスト End With End With End Sub

増やしたい項目について「UserForm_Initialize()」に記載しましたが、adbtnのイベントに記載すべきな気もしてきます。
adbtnのイベントのプロシージャに記載したとして、ボタンを押しただけ増えるので、それでは動かないのでは?
という疑問もあります。

テキストボックスの変数が現在expaとなっていますが、増えた項目はそれぞれ異なる変数としたく、左上の「反映」ボタンでセルに記載したいです。

アドバイスいただければ幸いです。
よろしくおい願いします。

~追記~
以下のイベントプロシージャを追加したのですが何も起きません。
Public を付けてみたり adbtn_Click() を ad_Click()(モジュール名)に変更したりと色々試したのですが、ボタンを押しても反応させることが出来ませんでした。
原因などアドバイスいただければ幸いです。

Public Sub adbtn_Click() With NForm With .Controls.Add("Forms.Label.1", "LEX", True) 'ジャンル .Top = 202 'Top位置(表示位置を移動する) .Left = 10 'Left位置 .Height = 20 '高さ .Width = 50 '幅 .BackColor = 25 '背景色 .BackStyle = 0 .ForeColor = 1 '文字色 .Font.Name = "メイリオ" 'テキストのスタイル .TextAlign = 2 'テキストの位置 .FontSize = 16 'テキストのサイズ .Caption = "内容" End With With .Controls.Add("Forms.TextBox.1", "TEX", True) 'ジャンルラベル .Top = 202 .Left = 70 'Left位置 .Height = 20 '高さ .Width = 250 '幅 .BorderStyle = fmBorderStyleSingle '枠線 .BackColor = RGB(255, 255, 255) '背景色 .ForeColor = RGB(0, 0, 0) '文字色 .Font.Name = "メイリオ" 'テキストのスタイル .TextAlign = 2 'テキストの位置 .FontSize = 10 'テキストのサイズ .Text = "テスト" '表示のテキスト End With End With End Sub

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コマンドボタンをクリックしたときにテキストボックスを追加するので、コマンドボタンのクリック時のイベントプロシージャにテキストボックスを追加するコードを記述することになります。
追加ボタンはUserForm_Initialize()で追加するのではなく、最初からユーザーフォーム上に配置しておけばそれをダブルクリックするだけでクリック時のイベントプロシージャの雛形が追加されますので、そこにテキストボックスを追加するコードを記述すればいいでしょう。

追加したテキストボックスを参照するには、名前を規則的なもの(例えば Txt1, Txt2, txt3・・・)にしておけば名前から参照できます。
あるいは動的配列かコレクションに格納してもいいでしょう。

上記の説明がよく分からないという場合は、最初から予想される最大数のテキストボックスを配置しておいて、非表示(Visible=False)にしておいて、adbtnのクリック時に表示(Visible=True)させるようにするというのが分かり安いとの思います。

投稿2020/11/16 23:13

編集2020/11/16 23:27
hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ice930

2020/11/19 00:20

ご回答ありがとうございます! 「項目追加ボタン」について、確かに場所が変わらないので、Sub UserForm_Initialize()で設定する必要有りませんでした。(修正します。) 他2つのラベルとテキストボックスについて、一旦ボタンを押すと、この2つのみ作成されるプロシージャを作成したのですが、ボタンを押しても反応させることができませんでした。 シートへ配置したコマンドボタンと、フォームへ配置したコマンドボタンでは、イベントボタンの書き方が変わったりしますでしょうか? ご存じでしたらご助言いただければ幸いです。
ice930

2020/11/20 13:19

最上部に「Dim WithEvents adbtn As CommandButton」を忘れていました・・・。 ありがとうございました!解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問