adding multiple labels and textboxes to an Excel userform during runtime using vba

后端 未结 1 1087
清歌不尽
清歌不尽 2021-01-01 07:13

I\'m creating an inventory management tool with Excel VBA. I\'ve created code that gathers a list of names from a drop down box on Internet Explorer and puts them into an ar

相关标签:
1条回答
  • 2021-01-01 07:36

    Lou the answer to the question is misleading. The question wants to provide a default name when adding the control by changing its ProgID ( bstrProgID is a string that references the class that is to be created).

    You can rename the new controls provided that another control does not have the same name.

    You can also pass the controls name as an argument to the Controls.Add method.

    Your labels are not showing is that you never set the Label.Caption value.

    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
    

    Next Issue: how do you get the data from these dynamically created textboxes?

    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
    
    0 讨论(0)
提交回复
热议问题