/ / vba - excel、vba、excel-vba、userformを使用して、実行時に複数のラベルとテキストボックスをExcelユーザーフォームに追加する

vba - excel、vba、excel-vba、userformを使用して、実行時に複数のラベルとテキストボックスをExcelユーザーフォームに追加する

私はExcel VBAを使って在庫管理ツールを作成しています。Internet Explorerのドロップダウンボックスから名前のリストを収集し、配列に配置するコードを作成しました。

ここに画像の説明を入力

私がしなければならないことは、 vbaは、ユーザーフォームで複数のテキストボックスコンボボックスを動的に作成します。しかし、私は動的に各人が受け取るFLNsの数のためのユーザー名とテキストボックスのラベルを追加するでしょう。これらは、私がすでに作成した定義済みのユーザーフォームに入ります。

ここに画像の説明を入力

上のコード例では、 .Name = "Textbox" & i 次のラベルまたはテキストボックスの名前を変更します。 i 常に変化するリストに等しくなければならないので、それは石で設定することはできません;したがって、なぜ多くのラベルとテキストボックスが必要ですか? UBound(UserArray).

更新しました

Private Sub CreateControl()
Dim newTxt As msforms.Control, newLbl
Dim i As Integer, TopAmt
Dim UserArray As String

TopAmt = 30

For i = LBound(MyArray) + 1 To UBound(MyArray) - 1
Set newLbl = MultipleOptionForm.Controls.Add("Forms.Label.1")
With newLbl
.Name = "Label" & i
.Left = 10
.Top = TopAmt
.WordWrap = False
.AutoSize = True
.Visible = True
.Caption = MyArray(i)
Debug.Print .Name,
End With

Set newTxt = MultipleOptionForm.Controls.Add(bstrProgID:="Forms.Textbox.1", Name:="Textbox" & i)
With newTxt
.Left = 150
.Top = TopAmt
.Visible = True
.Width = 20
Debug.Print .Name
End With
TopAmt = TopAmt + newTxt.Height
Next

MultipleOptionForm.Show
End Sub

可能であれば、これを行う方法に関する提案はありますか?私はこれを達成するためにExcelスプレッドシート自体を使用することは嫌です。

回答:

回答№1は2

ルーの質問への答えは誤解を招く。 問題は、ProgID(bstrProgIDは作成するクラスを参照する文字列)を変更してコントロールを追加するときに、デフォルトの名前を指定したいと考えています。

別のコントロールが同じ名前でない場合は、新しいコントロールの名前を変更できます。

コントロール名を引数として渡すこともできます Controls.Add 方法。

ラベルが表示されない Label.Caption 値。

ここに画像の説明を入力

Private Sub CreateControl()
Dim newLbl As MSForms.Label
Dim newTxt As MSForms.Control
Dim i As Integer, TopAmt
Dim UserArray As Variant

TopAmt = 50
UserArray = Array("Cat", "Dog", "Horse", "Gorrilla")

For i = LBound(UserArray) To UBound(UserArray)
Set newLbl = MultipleOptionForm.Controls.Add("Forms.Label.1")
With newLbl
.Name = "Label" & i
.Left = 50
.Top = TopAmt
.Visible = True
.Caption = UserArray(i)
Debug.Print .Name,
End With

Set newTxt = MultipleOptionForm.Controls.Add(bstrProgID:="Forms.Textbox.1", Name:="Textbox" & i)
With newTxt
.Left = 100
.Top = TopAmt
.Visible = True
Debug.Print .Name
End With
TopAmt = TopAmt + newTxt.Height
Next
End Sub

次の記事:これらの動的に作成されたテキストボックスからデータをどのように取得しますか?

Dim newTxt As MSForms.Control
For i = LBound(UserArray) To UBound(UserArray)
set newTxt  =  MultipleOptionForm.Controls("Textbox" & i)
If UserArray(i) <> newTxt.Value then
"Do something
End if
Next