ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Adding "additional" controls programatically (https://www.excelbanter.com/excel-programming/384421-adding-additional-controls-programatically.html)

What-A-Tool

Adding "additional" controls programatically
 
I have code which creates a form if required - I am able to add standard
form controls this way, but I would like to add an "additional" control
(progress bar) to my programmatically created form. I can't seem to find any
examples of how to do this.
Could anyone help, please?

Thank You - Sean



Doug Glancy[_7_]

Adding "additional" controls programatically
 
Sean,

I haven't done this much but I think something like this - I assume a form
with a button on it. When you click the button another button is added:

Private Sub CommandButton1_Click()
Dim test_button As MSForms.CommandButton
Dim ctl As Control

'look under help for "Add" to get the other bstrProgIDs, but they follow the
form below
Set test_button = Me.Controls.Add(bstrProgID:="Forms.CommandButton.1 ",
Name:="btnTestButton", Visible:=True)
With test_button
.Caption = "Test Button"
End With
'It looks like you can only set location by recasting it as a generic
control
Set ctl = test_button
With ctl
.Top = 20
.Left = 20
End With
End Sub

John Walkenbach has a whole section on this he

http://www.j-walk.com/ss/excel/tips/tip76.htm

hth,

Doug

"What-A-Tool" wrote in message
...
I have code which creates a form if required - I am able to add standard
form controls this way, but I would like to add an "additional" control
(progress bar) to my programmatically created form. I can't seem to find
any examples of how to do this.
Could anyone help, please?

Thank You - Sean




What-A-Tool

Adding "additional" controls programatically
 
Thank you for your help , however :
This works fine, as long as the control to add is part of the Forms
control group. I don't believe there is a Forms.Progressbar. How do I add a
control that isn't in this collection?


"Doug Glancy" wrote in message
...
Sean,

I haven't done this much but I think something like this - I assume a form
with a button on it. When you click the button another button is added:

Private Sub CommandButton1_Click()
Dim test_button As MSForms.CommandButton
Dim ctl As Control

'look under help for "Add" to get the other bstrProgIDs, but they follow
the form below
Set test_button = Me.Controls.Add(bstrProgID:="Forms.CommandButton.1 ",
Name:="btnTestButton", Visible:=True)
With test_button
.Caption = "Test Button"
End With
'It looks like you can only set location by recasting it as a generic
control
Set ctl = test_button
With ctl
.Top = 20
.Left = 20
End With
End Sub

John Walkenbach has a whole section on this he

http://www.j-walk.com/ss/excel/tips/tip76.htm

hth,

Doug

"What-A-Tool" wrote in message
...
I have code which creates a form if required - I am able to add standard
form controls this way, but I would like to add an "additional" control
(progress bar) to my programmatically created form. I can't seem to find
any examples of how to do this.
Could anyone help, please?

Thank You - Sean






Bob Phillips

Adding "additional" controls programatically
 
If you want a progress bar, as you note there is no built-in control (there
may be commercial controls, but I know of none), but you could just add the
usual type of progress indicator as described here
http://www.enhanceddatasystems.com/E...rogressBar.htm

--
---
HTH

Bob

(there's no email, no snail mail, but somewhere should be gmail in my addy)



"What-A-Tool" wrote in message
...
Thank you for your help , however :
This works fine, as long as the control to add is part of the Forms
control group. I don't believe there is a Forms.Progressbar. How do I add
a control that isn't in this collection?


"Doug Glancy" wrote in message
...
Sean,

I haven't done this much but I think something like this - I assume a
form with a button on it. When you click the button another button is
added:

Private Sub CommandButton1_Click()
Dim test_button As MSForms.CommandButton
Dim ctl As Control

'look under help for "Add" to get the other bstrProgIDs, but they follow
the form below
Set test_button = Me.Controls.Add(bstrProgID:="Forms.CommandButton.1 ",
Name:="btnTestButton", Visible:=True)
With test_button
.Caption = "Test Button"
End With
'It looks like you can only set location by recasting it as a generic
control
Set ctl = test_button
With ctl
.Top = 20
.Left = 20
End With
End Sub

John Walkenbach has a whole section on this he

http://www.j-walk.com/ss/excel/tips/tip76.htm

hth,

Doug

"What-A-Tool" wrote in message
...
I have code which creates a form if required - I am able to add standard
form controls this way, but I would like to add an "additional" control
(progress bar) to my programmatically created form. I can't seem to find
any examples of how to do this.
Could anyone help, please?

Thank You - Sean








What-A-Tool

Adding "additional" controls programatically
 
"Bob Phillips" wrote in message
...
If you want a progress bar, as you note there is no built-in control
(there may be commercial controls, but I know of none), but you could just
add the usual type of progress indicator as described here
http://www.enhanceddatasystems.com/E...rogressBar.htm

--
---
HTH

Bob


So you are saying there is no way to programatically add the Microsoft
ProgressBar Control, Version 5.0 or Version 6.0, that I have available in
the "Addtional Controls" dialog box accesible from the tools menu? These
controls are contained in comctl32.ocx, or MSCOMCTL.OCX, respectively. Is
there a way to programatically create a reference to 1 of these .ocx files,
and add the control from there?

Thanks Bob -
Sean



Doug Glancy[_7_]

Adding "additional" controls programatically
 
Sean,

I don't know how to do what you ask.

I think controls are usurally added at runtime in situations where the exact
number of controls needed is not yet known, for example, one textbox per
record, when the number of records to be entered can't be known at design
time.

If this is not the case with your application. perhaps you could add the
progress bar to the bottom of your form at design time, and just expand the
form during run time when you want the bar to be visible?

just a thought,

Doug

"What-A-Tool" wrote in message
...
"Bob Phillips" wrote in message
...
If you want a progress bar, as you note there is no built-in control
(there may be commercial controls, but I know of none), but you could
just add the usual type of progress indicator as described here
http://www.enhanceddatasystems.com/E...rogressBar.htm

--
---
HTH

Bob


So you are saying there is no way to programatically add the Microsoft
ProgressBar Control, Version 5.0 or Version 6.0, that I have available in
the "Addtional Controls" dialog box accesible from the tools menu? These
controls are contained in comctl32.ocx, or MSCOMCTL.OCX, respectively. Is
there a way to programatically create a reference to 1 of these .ocx
files, and add the control from there?

Thanks Bob -
Sean




Andy Pope

Adding "additional" controls programatically
 
Hi,

This works for me. Adds progress bar to userform and when the form is
clicked will do a simple 1 to 100 prorgess.

Private m_objPBar As Object
Private Sub UserForm_Click()

Dim lngIndex As Long
Dim lngLoop As Long

m_objPBar.Value = 0
For lngIndex = 1 To 100
For lngLoop = 1 To 599999
Next
m_objPBar.Value = m_objPBar.Value + 1
Next

End Sub
Private Sub UserForm_Initialize()

Set m_objPBar = _
Me.Controls.Add("MSComctlLib.ProgCtrl.2", "myProg", True)

With m_objPBar
.Top = 5
.Left = 5
.Width = Me.InsideWidth - 10
.Height = 15
.Value = 0
End With

End Sub

Cheers
Andy

What-A-Tool wrote:
"Bob Phillips" wrote in message
...

If you want a progress bar, as you note there is no built-in control
(there may be commercial controls, but I know of none), but you could just
add the usual type of progress indicator as described here
http://www.enhanceddatasystems.com/E...rogressBar.htm

--
---
HTH

Bob



So you are saying there is no way to programatically add the Microsoft
ProgressBar Control, Version 5.0 or Version 6.0, that I have available in
the "Addtional Controls" dialog box accesible from the tools menu? These
controls are contained in comctl32.ocx, or MSCOMCTL.OCX, respectively. Is
there a way to programatically create a reference to 1 of these .ocx files,
and add the control from there?

Thanks Bob -
Sean



Doug Glancy[_7_]

Adding "additional" controls programatically
 
Andy,

Your post reminded me that even though Intellisense doesn't show a property
for a control, e.g., ".top" it might still be available. I do wonder
though, why "top" didn't show for my earlier example of an MSForms.Button,
but did when I cast it as a Control? Anyways, a good reminder not to rely
too much on the IDE features, although generally I'd be lost without them.

Doug

"Andy Pope" wrote in message
...
Hi,

This works for me. Adds progress bar to userform and when the form is
clicked will do a simple 1 to 100 prorgess.

Private m_objPBar As Object
Private Sub UserForm_Click()

Dim lngIndex As Long
Dim lngLoop As Long

m_objPBar.Value = 0
For lngIndex = 1 To 100
For lngLoop = 1 To 599999
Next
m_objPBar.Value = m_objPBar.Value + 1
Next

End Sub
Private Sub UserForm_Initialize()

Set m_objPBar = _
Me.Controls.Add("MSComctlLib.ProgCtrl.2", "myProg", True)

With m_objPBar
.Top = 5
.Left = 5
.Width = Me.InsideWidth - 10
.Height = 15
.Value = 0
End With

End Sub

Cheers
Andy

What-A-Tool wrote:
"Bob Phillips" wrote in message
...

If you want a progress bar, as you note there is no built-in control
(there may be commercial controls, but I know of none), but you could
just add the usual type of progress indicator as described here
http://www.enhanceddatasystems.com/E...rogressBar.htm

--
---
HTH

Bob



So you are saying there is no way to programatically add the Microsoft
ProgressBar Control, Version 5.0 or Version 6.0, that I have available in
the "Addtional Controls" dialog box accesible from the tools menu? These
controls are contained in comctl32.ocx, or MSCOMCTL.OCX, respectively. Is
there a way to programatically create a reference to 1 of these .ocx
files, and add the control from there?

Thanks Bob -
Sean




Andy Pope

Adding "additional" controls programatically
 
Hi Doug,

If you go to the Object Browser (F2) and in the libraries dropdown
restrict the search to MSForms you will see the CommandButton does not
appear to have the property Top. I have no idea why but as it's not
exposed here I can understand why intellisense does not know about it.

Cheers
Andy

Doug Glancy wrote:
Andy,

Your post reminded me that even though Intellisense doesn't show a property
for a control, e.g., ".top" it might still be available. I do wonder
though, why "top" didn't show for my earlier example of an MSForms.Button,
but did when I cast it as a Control? Anyways, a good reminder not to rely
too much on the IDE features, although generally I'd be lost without them.

Doug

"Andy Pope" wrote in message
...

Hi,

This works for me. Adds progress bar to userform and when the form is
clicked will do a simple 1 to 100 prorgess.

Private m_objPBar As Object
Private Sub UserForm_Click()

Dim lngIndex As Long
Dim lngLoop As Long

m_objPBar.Value = 0
For lngIndex = 1 To 100
For lngLoop = 1 To 599999
Next
m_objPBar.Value = m_objPBar.Value + 1
Next

End Sub
Private Sub UserForm_Initialize()

Set m_objPBar = _
Me.Controls.Add("MSComctlLib.ProgCtrl.2", "myProg", True)

With m_objPBar
.Top = 5
.Left = 5
.Width = Me.InsideWidth - 10
.Height = 15
.Value = 0
End With

End Sub

Cheers
Andy

What-A-Tool wrote:

"Bob Phillips" wrote in message
...


If you want a progress bar, as you note there is no built-in control
(there may be commercial controls, but I know of none), but you could
just add the usual type of progress indicator as described here
http://www.enhanceddatasystems.com/E...rogressBar.htm

--
---
HTH

Bob



So you are saying there is no way to programatically add the Microsoft
ProgressBar Control, Version 5.0 or Version 6.0, that I have available in
the "Addtional Controls" dialog box accesible from the tools menu? These
controls are contained in comctl32.ocx, or MSCOMCTL.OCX, respectively. Is
there a way to programatically create a reference to 1 of these .ocx
files, and add the control from there?

Thanks Bob -
Sean





Doug Glancy[_7_]

Adding "additional" controls programatically
 
Thanks Andy,

When I looked in the Object Browser, I can see that it's true for the other
MSForms controls as well.

Doug

"Andy Pope" wrote in message
...
Hi Doug,

If you go to the Object Browser (F2) and in the libraries dropdown
restrict the search to MSForms you will see the CommandButton does not
appear to have the property Top. I have no idea why but as it's not
exposed here I can understand why intellisense does not know about it.

Cheers
Andy

Doug Glancy wrote:
Andy,

Your post reminded me that even though Intellisense doesn't show a
property for a control, e.g., ".top" it might still be available. I do
wonder though, why "top" didn't show for my earlier example of an
MSForms.Button, but did when I cast it as a Control? Anyways, a good
reminder not to rely too much on the IDE features, although generally I'd
be lost without them.

Doug

"Andy Pope" wrote in message
...

Hi,

This works for me. Adds progress bar to userform and when the form is
clicked will do a simple 1 to 100 prorgess.

Private m_objPBar As Object
Private Sub UserForm_Click()

Dim lngIndex As Long
Dim lngLoop As Long

m_objPBar.Value = 0
For lngIndex = 1 To 100
For lngLoop = 1 To 599999
Next
m_objPBar.Value = m_objPBar.Value + 1
Next

End Sub
Private Sub UserForm_Initialize()

Set m_objPBar = _
Me.Controls.Add("MSComctlLib.ProgCtrl.2", "myProg", True)

With m_objPBar
.Top = 5
.Left = 5
.Width = Me.InsideWidth - 10
.Height = 15
.Value = 0
End With

End Sub

Cheers
Andy

What-A-Tool wrote:

"Bob Phillips" wrote in message
.. .


If you want a progress bar, as you note there is no built-in control
(there may be commercial controls, but I know of none), but you could
just add the usual type of progress indicator as described here
http://www.enhanceddatasystems.com/E...rogressBar.htm

--
---
HTH

Bob



So you are saying there is no way to programatically add the Microsoft
ProgressBar Control, Version 5.0 or Version 6.0, that I have available
in the "Addtional Controls" dialog box accesible from the tools menu?
These controls are contained in comctl32.ocx, or MSCOMCTL.OCX,
respectively. Is there a way to programatically create a reference to 1
of these .ocx files, and add the control from there?

Thanks Bob -
Sean





What-A-Tool

Adding "additional" controls programatically
 

"Andy Pope" wrote in message
...
Hi,

This works for me. Adds progress bar to userform and when the form is
clicked will do a simple 1 to 100 prorgess.

Private m_objPBar As Object
Private Sub UserForm_Click()

Dim lngIndex As Long
Dim lngLoop As Long

m_objPBar.Value = 0
For lngIndex = 1 To 100
For lngLoop = 1 To 599999
Next
m_objPBar.Value = m_objPBar.Value + 1
Next

End Sub
Private Sub UserForm_Initialize()

Set m_objPBar = _
Me.Controls.Add("MSComctlLib.ProgCtrl.2", "myProg", True)

With m_objPBar
.Top = 5
.Left = 5
.Width = Me.InsideWidth - 10
.Height = 15
.Value = 0
End With

End Sub

Cheers
Andy


Interesting - I'll give it a try.
Thanks to all for your input - I'll get back and let you know how it worked.



Tom Ogilvy

Adding "additional" controls programatically
 
think of it this way.

When in a userform, an MSforms control is in the control container and
inherits those properties such as an exit event and a top property. In a
worksheet, it gets some properties and events from the oleobject container.

--
Regards,
Tom Ogilvy

"Doug Glancy" wrote in message
...
Thanks Andy,

When I looked in the Object Browser, I can see that it's true for the
other MSForms controls as well.

Doug

"Andy Pope" wrote in message
...
Hi Doug,

If you go to the Object Browser (F2) and in the libraries dropdown
restrict the search to MSForms you will see the CommandButton does not
appear to have the property Top. I have no idea why but as it's not
exposed here I can understand why intellisense does not know about it.

Cheers
Andy

Doug Glancy wrote:
Andy,

Your post reminded me that even though Intellisense doesn't show a
property for a control, e.g., ".top" it might still be available. I do
wonder though, why "top" didn't show for my earlier example of an
MSForms.Button, but did when I cast it as a Control? Anyways, a good
reminder not to rely too much on the IDE features, although generally
I'd be lost without them.

Doug

"Andy Pope" wrote in message
...

Hi,

This works for me. Adds progress bar to userform and when the form is
clicked will do a simple 1 to 100 prorgess.

Private m_objPBar As Object
Private Sub UserForm_Click()

Dim lngIndex As Long
Dim lngLoop As Long

m_objPBar.Value = 0
For lngIndex = 1 To 100
For lngLoop = 1 To 599999
Next
m_objPBar.Value = m_objPBar.Value + 1
Next

End Sub
Private Sub UserForm_Initialize()

Set m_objPBar = _
Me.Controls.Add("MSComctlLib.ProgCtrl.2", "myProg", True)

With m_objPBar
.Top = 5
.Left = 5
.Width = Me.InsideWidth - 10
.Height = 15
.Value = 0
End With

End Sub

Cheers
Andy

What-A-Tool wrote:

"Bob Phillips" wrote in message
. ..


If you want a progress bar, as you note there is no built-in control
(there may be commercial controls, but I know of none), but you could
just add the usual type of progress indicator as described here
http://www.enhanceddatasystems.com/E...rogressBar.htm

--
---
HTH

Bob



So you are saying there is no way to programatically add the Microsoft
ProgressBar Control, Version 5.0 or Version 6.0, that I have available
in the "Addtional Controls" dialog box accesible from the tools menu?
These controls are contained in comctl32.ocx, or MSCOMCTL.OCX,
respectively. Is there a way to programatically create a reference to 1
of these .ocx files, and add the control from there?

Thanks Bob -
Sean






Doug Glancy[_7_]

Adding "additional" controls programatically
 
Tom,

That makes sense. Is there any way to know what properties it's inherited
besides trial and error? I guess doing what I did - declaring both as
Control/OleObject and the specific control is one way to figure it out.

Thanks,

Doug

"Tom Ogilvy" wrote in message
...
think of it this way.

When in a userform, an MSforms control is in the control container and
inherits those properties such as an exit event and a top property. In a
worksheet, it gets some properties and events from the oleobject
container.

--
Regards,
Tom Ogilvy

"Doug Glancy" wrote in message
...
Thanks Andy,

When I looked in the Object Browser, I can see that it's true for the
other MSForms controls as well.

Doug

"Andy Pope" wrote in message
...
Hi Doug,

If you go to the Object Browser (F2) and in the libraries dropdown
restrict the search to MSForms you will see the CommandButton does not
appear to have the property Top. I have no idea why but as it's not
exposed here I can understand why intellisense does not know about it.

Cheers
Andy

Doug Glancy wrote:
Andy,

Your post reminded me that even though Intellisense doesn't show a
property for a control, e.g., ".top" it might still be available. I do
wonder though, why "top" didn't show for my earlier example of an
MSForms.Button, but did when I cast it as a Control? Anyways, a good
reminder not to rely too much on the IDE features, although generally
I'd be lost without them.

Doug

"Andy Pope" wrote in message
...

Hi,

This works for me. Adds progress bar to userform and when the form is
clicked will do a simple 1 to 100 prorgess.

Private m_objPBar As Object
Private Sub UserForm_Click()

Dim lngIndex As Long
Dim lngLoop As Long

m_objPBar.Value = 0
For lngIndex = 1 To 100
For lngLoop = 1 To 599999
Next
m_objPBar.Value = m_objPBar.Value + 1
Next

End Sub
Private Sub UserForm_Initialize()

Set m_objPBar = _
Me.Controls.Add("MSComctlLib.ProgCtrl.2", "myProg", True)

With m_objPBar
.Top = 5
.Left = 5
.Width = Me.InsideWidth - 10
.Height = 15
.Value = 0
End With

End Sub

Cheers
Andy

What-A-Tool wrote:

"Bob Phillips" wrote in message
.. .


If you want a progress bar, as you note there is no built-in control
(there may be commercial controls, but I know of none), but you could
just add the usual type of progress indicator as described here
http://www.enhanceddatasystems.com/E...rogressBar.htm

--
---
HTH

Bob



So you are saying there is no way to programatically add the Microsoft
ProgressBar Control, Version 5.0 or Version 6.0, that I have available
in the "Addtional Controls" dialog box accesible from the tools menu?
These controls are contained in comctl32.ocx, or MSCOMCTL.OCX,
respectively. Is there a way to programatically create a reference to
1 of these .ocx files, and add the control from there?

Thanks Bob -
Sean








Tom Ogilvy

Adding "additional" controls programatically
 
Looking at the object browser would be what I would do.

--
Regards,
Tom Ogilvy

"Doug Glancy" wrote in message
...
Tom,

That makes sense. Is there any way to know what properties it's inherited
besides trial and error? I guess doing what I did - declaring both as
Control/OleObject and the specific control is one way to figure it out.

Thanks,

Doug

"Tom Ogilvy" wrote in message
...
think of it this way.

When in a userform, an MSforms control is in the control container and
inherits those properties such as an exit event and a top property. In a
worksheet, it gets some properties and events from the oleobject
container.

--
Regards,
Tom Ogilvy

"Doug Glancy" wrote in message
...
Thanks Andy,

When I looked in the Object Browser, I can see that it's true for the
other MSForms controls as well.

Doug

"Andy Pope" wrote in message
...
Hi Doug,

If you go to the Object Browser (F2) and in the libraries dropdown
restrict the search to MSForms you will see the CommandButton does not
appear to have the property Top. I have no idea why but as it's not
exposed here I can understand why intellisense does not know about it.

Cheers
Andy

Doug Glancy wrote:
Andy,

Your post reminded me that even though Intellisense doesn't show a
property for a control, e.g., ".top" it might still be available. I
do wonder though, why "top" didn't show for my earlier example of an
MSForms.Button, but did when I cast it as a Control? Anyways, a good
reminder not to rely too much on the IDE features, although generally
I'd be lost without them.

Doug

"Andy Pope" wrote in message
...

Hi,

This works for me. Adds progress bar to userform and when the form is
clicked will do a simple 1 to 100 prorgess.

Private m_objPBar As Object
Private Sub UserForm_Click()

Dim lngIndex As Long
Dim lngLoop As Long

m_objPBar.Value = 0
For lngIndex = 1 To 100
For lngLoop = 1 To 599999
Next
m_objPBar.Value = m_objPBar.Value + 1
Next

End Sub
Private Sub UserForm_Initialize()

Set m_objPBar = _
Me.Controls.Add("MSComctlLib.ProgCtrl.2", "myProg", True)

With m_objPBar
.Top = 5
.Left = 5
.Width = Me.InsideWidth - 10
.Height = 15
.Value = 0
End With

End Sub

Cheers
Andy

What-A-Tool wrote:

"Bob Phillips" wrote in message
. ..


If you want a progress bar, as you note there is no built-in control
(there may be commercial controls, but I know of none), but you
could just add the usual type of progress indicator as described
here
http://www.enhanceddatasystems.com/E...rogressBar.htm

--
---
HTH

Bob



So you are saying there is no way to programatically add the
Microsoft ProgressBar Control, Version 5.0 or Version 6.0, that I
have available in the "Addtional Controls" dialog box accesible from
the tools menu? These controls are contained in comctl32.ocx, or
MSCOMCTL.OCX, respectively. Is there a way to programatically create
a reference to 1 of these .ocx files, and add the control from there?

Thanks Bob -
Sean











All times are GMT +1. The time now is 09:55 AM.

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