ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Adding controls to a userform at runtime (https://www.excelbanter.com/excel-programming/427934-adding-controls-userform-runtime.html)

AlanGriffithKapitiNZ

Adding controls to a userform at runtime
 
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?



OssieMac

Adding controls to a userform at runtime
 
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


--
Regards,

OssieMac


"AlanGriffithKapitiNZ" wrote:

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?



OssieMac

Adding controls to a userform at runtime
 
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

--
Regards,

OssieMac


"OssieMac" wrote:

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


--
Regards,

OssieMac


"AlanGriffithKapitiNZ" wrote:

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?



Dave Peterson

Adding controls to a userform at runtime
 
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.

AlanGriffithKapitiNZ wrote:

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?


--

Dave Peterson


All times are GMT +1. The time now is 05:26 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com