从动态文本框

时间:2018-02-07 19:05:18

标签: excel vba

我有一个名为'UserForm'的excel vba表单。总的来说,有一个按钮(名称为“buttonAdd”),该功能可以动态创建/添加基于输入(来自“a”variabel)值的文本框。这是代码。

Public Sub buttonAdd_Click()
Dim a As Integer
a = TextBox1.Value
Dim cCntrl As Control

For i = 1 To a
    Set cCntrl = Me.Controls.Add("Forms.TextBox.1", "quarter", True)
    With cCntrl
        .Name = "quarter" & d
        .Width = 150
        .Height = 25
        .Top = 100 + (d * 25)
        .Left = 220
        .ZOrder (0)
    End With
 Next i

现在,我有一个问题。我无法从这些动态文本框中获取/获取值。我尝试使用此代码将值保存到'A1'单元格中,但它不起作用。

Private Sub SaveButton_Click()
Dim a As Integer
Dim Ws As Worksheet
Dim cCntrl As Control
    Set Ws = Worksheets("Sheet1")
    Ws.Range("A1").Value = quarter1.Value
End Sub

我认为第一个动态文本框的名称是quarter1,但是当我试图获取该值时,它不起作用。无论如何还是暗示解决这个问题。只是说:只需取第一个文本框的值,将其写入,然后再取另一个,依此类推。

非常感谢。

1 个答案:

答案 0 :(得分:0)

看起来你的问题很简单。您使用了d而不是i(代码中未定义d)。我建议始终使用Option Explicit

Public Sub buttonAdd_Click()
Dim a As Long ' Minor, but Integer I sjust too short these days for a lot of things.
Dim i as Long

a = TextBox1.Value
Dim cCntrl As Control

For i = 1 To a
    Set cCntrl = Me.Controls.Add("Forms.TextBox.1", "quarter", True)
    With cCntrl
        .Name = "quarter" & CStr(i)  ' explicit rather than implicit conversion
        .Width = 150
        .Height = 25
        .Top = 100 + (i * 25)
        .Left = 220
        .ZOrder (0)
    End With
 Next I

编辑:在.Add命令中可能会出现更多错别字(例如,您可能想要"季度"&" 1"而不仅仅是"四分之一"?)但我现在还没有VBA参考资料来检查。