动态用户窗体中的地址文本框



到目前为止,我在这里读了很多书,得到了很多帮助。谢谢!现在有一件事我不能再进一步了。

我想在 Excel/VBA 中动态创建一个用户表单。到目前为止,这是有效的,这里是我如何创建 5 个名称为 TextBox1-5 的文本框的示例。

For cTextBox = 1 To 5
Set edtBox_n = usrFrm.Controls.Add("Forms.textbox.1", "TextBox" & cTextBox)
With edtBox_n
.Top = nTop
.Left = 200
'                        .MultiLine = True
'                        .EnterKeyBehavior = True
.Height = 20
.Width = 150
.Text = .Name
'.Name = "Textbox" & cTextBox
End With

nTop = nTop + 20
Next cTextBox

但是我无法使用命令处理文本框,例如

Sub CommandButton1_Click()
test = usrFrm.TextBox1.Value
End Sub

有人有想法吗?Excel说文本框不存在/对象不存在。 多谢!

我处理这个问题的方法是创建一个类,该类将处理控件和事件的大量创建。 例如类ctrlTextBox

Option Explicit
Public WithEvents edtBox_n As MSForms.TextBox
Private UForm As UserForm
Public Sub Initialize(frm As UserForm, nme As String)
Set UForm = frm
Set editbox_n = UForm.Controls.Add(bstrProgID:="Forms.TextBox.1", Name:=nme)
End Sub
Private Sub edtBox_n_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox edtBox_n.value
End Sub

在我的Userform中,我首先声明一个在整个表单中可用的公共Collection。我将在此处存储所有动态创建的控件。

Option Explicit
Private cControls As Collection
Private Sub UserForm_Initialize()
Dim cTextBox As Long
Dim edtBox_n As ctrlTextBox
Dim nTop As Long
Set cControls = New Collection
For cTextBox = 1 To 5
Set edtBox_n = New ctrlTextBox
edtBox_n.Initialize frm:=Me, nme:="TextBox" & cTextBox
With edtBox_n.edtBox_n
.Top = nTop
.Left = 200
'                        .MultiLine = True
'                        .EnterKeyBehavior = True
.Height = 20
.Width = 150
.Text = .Name
End With
cControls.Add edtBox_n
nTop = nTop + 20
Next cTextBox
End Sub

最新更新