はじめに
前回の拡張です。touch-sp.hatenablog.com
テキストボックス、ラベルも使えるように拡張してみました。
プロンプト
ユーザーフォームを2行3列に分割し1行目にラベル、ボタン、ボタン、2行目にテキストボックス、テキストボックス、ボタンを並べたい。すべてのコントロールの幅は同じにしてください。
結果
返ってきたコードを実行するとこのようになりました。
完璧でした。
ただし、「すべてのコントロールの幅は同じにしてください。」の文言を入れなければおかしな大きさになってしまいました。
方法
システムプロンプトに以下を入力しておきました。それだけです。以下は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
'''