はじめに
前回の拡張です。touch-sp.hatenablog.com
テキストボックス、ラベルも使えるように拡張してみました。
プロンプト
ユーザーフォームを2行3列に分割し1行目にラベル、ボタン、ボタン、2行目にテキストボックス、テキストボックス、ボタンを並べたい。すべてのコントロールの幅は同じにしてください。
結果
返ってきたコードを実行するとこのようになりました。![](https://cdn-ak.f.st-hatena.com/images/fotolife/t/touch-sp/20240618/20240618133605.png)
完璧でした。
ただし、「すべてのコントロールの幅は同じにしてください。」の文言を入れなければおかしな大きさになってしまいました。
方法
システムプロンプトに以下を入力しておきました。それだけです。以下はVBAでユーザーフォームを2x3(2行3列)のグリッドに分割し、1行目にラベル、テキストボックス、ボタン、2行目にラベル、テキストボックス、ボタンを配置するためのコードです。これを参考にユーザーの質問に答えて下さい。 ''' Private WithEvents btn1 As CommandButton Private WithEvents btn2 As CommandButton Private txt1 As MSForms.TextBox Private txt2 As MSForms.TextBox Private lab1 As MSForms.Label Private lab2 As MSForms.Label Private Sub UserForm_Initialize() Dim row As Integer Dim col As Integer Dim control_height As Integer Dim control_width As Integer Dim margin As Integer Dim interval As Integer Dim font_size As Integer font_size = 24 control_width = 100 ' ボタンの幅 margin = 5 'ユーザーフォームとコントロール間のマージン interval = 10 'コントロール間のスペース Dim dummy As Object Set dummy = Me.Controls.Add("Forms.TextBox.1", "dummy_textbox") dummy.AutoSize = True dummy.Font.Size = font_size control_height = dummy.Height Me.Controls.Remove "dummy_textbox" row = 1 col = 1 Set lab1 = Me.Controls.Add("Forms.Label.1", "label1") With lab1 .Font.Size = font_size .Height = control_height .Width = control_width .TextAlign = fmTextAlignCenter .Top = (control_height + interval) * (row - 1) + margin .Left = control_width * (col - 1) + margin .Caption = "Label1" End With row = 1 col = 2 Set txt1 = Me.Controls.Add("Forms.TextBox.1", "textbox1") With txt1 .Font.Size = font_size .Height = control_height .Width = control_width .Top = (control_height + interval) * (row - 1) + margin .Left = control_width * (col - 1) + margin End With row = 1 col = 3 Set btn1 = Me.Controls.Add("Forms.CommandButton.1", "button1") With btn1 .Font.Size = font_size .Height = control_height .Width = control_width .Top = (control_height + interval) * (row - 1) + margin .Left = control_width * (col - 1) + margin .Caption = "Button1" End With row = 2 col = 1 Set lab2 = Me.Controls.Add("Forms.Label.1", "label2") With lab2 .Font.Size = font_size .Height = control_height .Width = control_width .TextAlign = fmTextAlignCenter .Top = (control_height + interval) * (row - 1) + margin .Left = control_width * (col - 1) + margin .Caption = "Label2" End With row = 2 col = 2 Set txt2 = Me.Controls.Add("Forms.TextBox.1", "textbox2") With txt2 .Font.Size = font_size .Height = control_height .Width = control_width .Top = (control_height + interval) * (row - 1) + margin .Left = control_width * (col - 1) + margin End With row = 2 col = 3 Set btn2 = Me.Controls.Add("Forms.CommandButton.1", "button2") With btn2 .Font.Size = font_size .Height = control_height .Width = control_width .Top = (control_height + interval) * (row - 1) + margin .Left = control_width * (col - 1) + margin .Caption = "Button2" End With Me.Height = control_height * 2 + interval * 1 + margin * 2 + 29 Me.Width = control_width * 3 + margin * 2 + 12 End Sub Private Sub btn1_Click() End Sub Private Sub btn2_Click() End Sub '''
![このエントリーをはてなブックマークに追加](https://b.st-hatena.com/images/v4/public/entry-button/button-only@2x.png)