【发布时间】:2019-07-23 09:27:19
【问题描述】:
尊敬的 StackOverFlow 成员,
我尝试在用户窗体中动态创建 texboxes 并根据选项卡中的值设置默认文本。
首先用户填写图片中的文本框
当他单击上面的按钮时,它会调用在同一用户窗体中创建文本框的函数。与文本框的值的总和一样多,此外,对于值“0”,它计为要添加的 1 个文本框。
我想要的是当它遇到0 值时,我希望创建的新 texbox 将默认文本设置为“null”。像这样:
我的代码:
For i = 0 To UBound(tabValTextBox)
valTemp = tabValTextBox(i)
If valTemp = 0 Then
iTextBoxMasqueA = iTextBoxMasqueA + 1
Set textBoxCableA = UserForm1.Controls.Add("Forms.TextBox.1")
colTextBoxCableA.Add textBoxCableA
With textBoxCableA
.Name = "cable" & iTextBoxCableA
.Top = iTextBoxCableA * textBoxCableA.Height + 50
.Left = 150
.Text = "Nul"
End With
Else
For j = 0 To valTemp - 1
iTextBoxCableA = iTextBoxCableA + 1
Set textBoxCableA = UserForm1.Controls.Add("Forms.TextBox.1")
colTextBoxCableA.Add textBoxCableA
With textBoxCableA
.Name = "cable" & iTextBoxCableA
.Top = iTextBoxCableA * textBoxCableA.Height + 50
.Left = 150
End With
Next j
End If
Next i
tabValTextbox() 是一个包含左侧文本框值的选项卡。
然而,我得到的结果如下所示:
我没有得到预期的那么多文本框。
我不明白我在哪里遗漏了一些东西。我想从中吸取教训,所以如果可能的话,请解释一下我在这里做错了什么,或者我的方法是否缺乏洞察力。
【问题讨论】:
-
我怀疑这是因为您设置
textBoxCableA的.Top仅使用iTextBoxCableA- 您没有在计算中考虑iTextBoxMasqueA所以如果存在零框,那么虽然所有的盒子都在被创建(和绘制)——有些是在其他的之上。您可以通过将.Left设置为零框来证明这一点,例如 140,这样您就可以看到两个重叠的时间。 -
@CLR 你说得对。我将 .Left 更改为 0 个框,它们都出现了。但是我看不到将它们显示在列中。
-
所以不是
iTextBoxCableA或iTextBoxMasqueA,而是创建一个在both情况下递增的新索引,并使用该索引在这两种情况下相乘案例。 - 或者按照我在下面的回答删除一个。 -
@CLR 是的,你说得对,我的错。我没有看到我拼错了索引。我想我可以看几个小时而看不到那个。谢谢老兄
标签: excel vba textbox userform