Adding controls to a userform at runtime

  • Thread starter Thread starter AlanGriffithKapitiNZ
  • Start date Start date
A

AlanGriffithKapitiNZ

I would like to generate various controls on a skeleton userform (eg, the
number may vary with the occasion) and have tried
Private Sub UserForm_activate()
Stop
Dim obj As Object
Set obj = Me
Set obj = obj.Add("MSForms.CommandButton.1", "Butt1", True)

but when the form opens I receive the error message
Runtime error '-2147221005(800401f3':
Invalid class string

What am I doing wrong, please?
 
Hi Alan,

Note: Space and underscore at the end of a line is a line break in an
otherwise single line of code.

Private Sub UserForm_Activate()

Dim Btn1 As MSForms.Control

On Error Resume Next
Set Btn1 = Me.Controls("Butt1")

If Btn1 Is Nothing Then
Set Btn1 = Me.Controls.Add _
("Forms.CommandButton.1", "Butt1", True)

With Btn1
.Caption = "My button"
.Top = 100
.Left = 100
.Height = 20
.Width = 100
End With
Else
'Insert your code here to handle if button already exists
MsgBox "Cannot Add Butt1. Already exists"
End If


End Sub
 
Hi again Alan,

Amendment. Need to cancel the On Error. Insert in code as follows

On Error Resume Next
Set Btn1 = Me.Controls("Butt1")
On Error GoTo 0
 
I've always had better luck to add all the controls that I'll ever need while in
design mode.

But I'll hide the ones I don't need. Then I can use code to show the ones I
need when I need them.

It makes it easier for the code associated with those controls, too.
 
Back
Top