You can add controls to a userform during runtime, but I've always found it
much, much, much easier to just add as many controls as I'll ever need--but hide
the ones that I don't need right away.
Then I can unhide the ones I want when I need them.
It makes life a lot simpler this way.
John Walkenbach shows how to create a userform on the fly. This includes adding
controls to that userform:
http://j-walk.com/ss/excel/tips/tip76.htm
This worked ok for me:
Option Explicit
Private Sub CommandButton1_Click()
Dim iCtr As Long
For iCtr = 1 To 3
With Controls.Add(bstrprogid:="Forms.Label.1", _
Name:="LBL_" & iCtr, Visible:=True)
.Left = 5
.Top = iCtr * 15
.Height = 10
.Width = 200
.Caption = "Hi from " & .Name
End With
Next iCtr
End Sub
Wiley Post wrote:
>
> I want to modify a UserForm dynamically by adding some number of labels from
> my VB/Excel program:
> Dim labels() as MSForms.Label
> :
> ReDim labels(NumLabels)
>
> At this point I have an array of Labels with each value set to Nothing. If
> I do this:
>
> Set labels(0) = New MSForms.Label
> I get runtime "Invalid use of New keyword" and Help says I cannot reference
> a class name in this context -- I need to reference a specific object name,
> e.g. Label1. So I tried:
>
> Dim Label1 as MSForms.Label
> Set labels(0) = New Label1
>
> and I get "User-defined type not defined"
>
> I have tried other things such as
> Dim labels() as New MSForms.Label
> and I also get errors.
>
> How do I programmatically create an array of Labels so that I can place them
> on my UserForm?
--
Dave Peterson