如何在 vba 中动态设置文本到文本框?
How to set text dynamically to texbox in vba?
亲爱的 Whosebug 会员,
我尝试在用户表单中动态创建文本框并根据选项卡中的值设置默认文本。
首先用户像照片中那样填写文本框
当他单击上面的按钮时,它会调用在同一用户窗体中创建文本框的函数。与文本框的总值一样多,此外,对于值“0”,它计为要添加的 1 个文本框。
我想要的是当它遇到 0
值时,我希望创建新的文本框以将默认文本设置为 "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()
是一个包含左侧文本框值的选项卡。
但是我得到的结果看起来像这样:
我没有得到预期的那么多文本框。
我不明白我在哪里遗漏了什么。我想从中吸取教训,所以如果可能的话,请向我解释我在这里做错了什么,或者我的方法是否缺乏洞察力。
试试这个:
For i = 0 To UBound(tabValTextBox)
valTemp = tabValTextBox(i)
iTextBoxCableA = iTextBoxCableA + 1
If valTemp = 0 Then
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
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
我已将 iTextBoxCableA
增量移到零条件之外,并完全删除了 iTextBoxMasqueA
增量,因为您没有使用它。
我自己无法测试,但我认为它会解决重叠问题。
亲爱的 Whosebug 会员,
我尝试在用户表单中动态创建文本框并根据选项卡中的值设置默认文本。
首先用户像照片中那样填写文本框
当他单击上面的按钮时,它会调用在同一用户窗体中创建文本框的函数。与文本框的总值一样多,此外,对于值“0”,它计为要添加的 1 个文本框。
我想要的是当它遇到 0
值时,我希望创建新的文本框以将默认文本设置为 "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()
是一个包含左侧文本框值的选项卡。
但是我得到的结果看起来像这样:
我没有得到预期的那么多文本框。
我不明白我在哪里遗漏了什么。我想从中吸取教训,所以如果可能的话,请向我解释我在这里做错了什么,或者我的方法是否缺乏洞察力。
试试这个:
For i = 0 To UBound(tabValTextBox)
valTemp = tabValTextBox(i)
iTextBoxCableA = iTextBoxCableA + 1
If valTemp = 0 Then
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
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
我已将 iTextBoxCableA
增量移到零条件之外,并完全删除了 iTextBoxMasqueA
增量,因为您没有使用它。
我自己无法测试,但我认为它会解决重叠问题。