ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   How to Pass a Form to a Function - 2007 (https://www.excelbanter.com/excel-programming/425479-how-pass-form-function-2007-a.html)

Aaron

How to Pass a Form to a Function - 2007
 
Hi,
Is there a way to pass a form to a function in VBA. For example, I have
created several userforms all of which have a combobox that I want filled
using the same set of code. Instead of including this code in each of the
forms code, I want to make this a function in a module and have the form just
call the function to fill the combobox. The function would accept the form
name or whatever and use it to fill the combobox.
I am new to VBA and have tried using
Public Function FillSize(Obj As MSForms.UserForm)
For i = 1 To Obj.cmdSize.ListCount
'Removes an item from the Combo Box
Obj.cmdSize.RemoveItem 0
Next i

With Obj.cmdSize
.AddItem "AddStuff" 'Add to combo box by reading excel sheet

End With
End Function

And I would call the function using
FillSize(Me)
OR
FillSize(UserForm_Name)

Unfortunately I am not the most experienced of programmers and I am unsure
how to accomplish this, if my code is even a step in the right direction, or
even if it possible to accomplish what Im asking.

Thanks for any help in advance,
--
Aaron

Ed Sowell

How to Pass a Form to a Function - 2007
 
Aaron,
Since it's a Public function it can be called from the code for any form.

Also, you can refer to the controls of any form anywhere by using the form
name. E.g.,

frmMyForm.cboList

Ed

"Aaron" wrote in message
...
Hi,
Is there a way to pass a form to a function in VBA. For example, I have
created several userforms all of which have a combobox that I want filled
using the same set of code. Instead of including this code in each of the
forms code, I want to make this a function in a module and have the form
just
call the function to fill the combobox. The function would accept the form
name or whatever and use it to fill the combobox.
I am new to VBA and have tried using
Public Function FillSize(Obj As MSForms.UserForm)
For i = 1 To Obj.cmdSize.ListCount
'Removes an item from the Combo Box
Obj.cmdSize.RemoveItem 0
Next i

With Obj.cmdSize
.AddItem "AddStuff" 'Add to combo box by reading excel sheet

End With
End Function

And I would call the function using
FillSize(Me)
OR
FillSize(UserForm_Name)

Unfortunately I am not the most experienced of programmers and I am unsure
how to accomplish this, if my code is even a step in the right direction,
or
even if it possible to accomplish what Im asking.

Thanks for any help in advance,
--
Aaron



Aaron

How to Pass a Form to a Function - 2007
 
Thanks for the Reply Ed,

Now when I implement the code, I have this kind of thing
Public Function FillSize(Obj)
For i = 1 To Obj.cmbSize.ListCount
'Removes an item from the Combo Box
Obj.cmbSize.RemoveItem 0
Next i
With Obj.cmbSize
.AddItem "AddStuff" 'Add to combo box by reading excel sheet
End With
End Function
And I send the form to the function using
FillSize(frmName)

However, on the line (and Im sure on the lines afterwards)
'For i = 1 To Obj.cmbSize.ListCount'

I get "RunTime error 438, Object doesnt support this property or method."
I'm not sure how to fix this problem and I am not sure which datatype 'Obj'
should be. I also get the same error when I set Obj As Object. Any code
examples or anything where something similar is done would help me a lot as I
cant seem to find any anywhere.

Any input is greatly appreciated. Thanks.
--
Aaron


"Ed Sowell" wrote:

Aaron,
Since it's a Public function it can be called from the code for any form.

Also, you can refer to the controls of any form anywhere by using the form
name. E.g.,

frmMyForm.cboList

Ed

"Aaron" wrote in message
...
Hi,
Is there a way to pass a form to a function in VBA. For example, I have
created several userforms all of which have a combobox that I want filled
using the same set of code. Instead of including this code in each of the
forms code, I want to make this a function in a module and have the form
just
call the function to fill the combobox. The function would accept the form
name or whatever and use it to fill the combobox.
I am new to VBA and have tried using
Public Function FillSize(Obj As MSForms.UserForm)
For i = 1 To Obj.cmdSize.ListCount
'Removes an item from the Combo Box
Obj.cmdSize.RemoveItem 0
Next i

With Obj.cmdSize
.AddItem "AddStuff" 'Add to combo box by reading excel sheet

End With
End Function

And I would call the function using
FillSize(Me)
OR
FillSize(UserForm_Name)

Unfortunately I am not the most experienced of programmers and I am unsure
how to accomplish this, if my code is even a step in the right direction,
or
even if it possible to accomplish what Im asking.

Thanks for any help in advance,
--
Aaron



Jon Peltier

How to Pass a Form to a Function - 2007
 
I think I'd try passing the form as a plain old object:

Public Function FillSize(Obj As Object)

- Jon
-------
Jon Peltier, Microsoft Excel MVP
Peltier Technical Services, Inc.
http://PeltierTech.com/WordPress/
_______


"Aaron" wrote in message
...
Thanks for the Reply Ed,

Now when I implement the code, I have this kind of thing
Public Function FillSize(Obj)
For i = 1 To Obj.cmbSize.ListCount
'Removes an item from the Combo Box
Obj.cmbSize.RemoveItem 0
Next i
With Obj.cmbSize
.AddItem "AddStuff" 'Add to combo box by reading excel
sheet
End With
End Function
And I send the form to the function using
FillSize(frmName)

However, on the line (and Im sure on the lines afterwards)
'For i = 1 To Obj.cmbSize.ListCount'

I get "RunTime error 438, Object doesnt support this property or method."
I'm not sure how to fix this problem and I am not sure which datatype
'Obj'
should be. I also get the same error when I set Obj As Object. Any code
examples or anything where something similar is done would help me a lot
as I
cant seem to find any anywhere.

Any input is greatly appreciated. Thanks.
--
Aaron


"Ed Sowell" wrote:

Aaron,
Since it's a Public function it can be called from the code for any form.

Also, you can refer to the controls of any form anywhere by using the
form
name. E.g.,

frmMyForm.cboList

Ed

"Aaron" wrote in message
...
Hi,
Is there a way to pass a form to a function in VBA. For example, I have
created several userforms all of which have a combobox that I want
filled
using the same set of code. Instead of including this code in each of
the
forms code, I want to make this a function in a module and have the
form
just
call the function to fill the combobox. The function would accept the
form
name or whatever and use it to fill the combobox.
I am new to VBA and have tried using
Public Function FillSize(Obj As MSForms.UserForm)
For i = 1 To Obj.cmdSize.ListCount
'Removes an item from the Combo Box
Obj.cmdSize.RemoveItem 0
Next i

With Obj.cmdSize
.AddItem "AddStuff" 'Add to combo box by reading excel
sheet

End With
End Function

And I would call the function using
FillSize(Me)
OR
FillSize(UserForm_Name)

Unfortunately I am not the most experienced of programmers and I am
unsure
how to accomplish this, if my code is even a step in the right
direction,
or
even if it possible to accomplish what Im asking.

Thanks for any help in advance,
--
Aaron





Ed Sowell

How to Pass a Form to a Function - 2007
 
Aaron,

I've not tried passing a form as an argument. Never felt the need to. They
way I do things is to have forms that have dotheform code, with helper
functions when justified either because of their complexity or simply too
many lines of code. Another reason would be if the same function is needed
by other forms.

If a form gets too complex from the users point of view I will sometimes use
a subform that the user can lanuch by the click of a button. In the
dotheform code for the main form I load the subform, launch it, then hide it
upon return. If there is a need, I customize the subform by setting some of
the controls, labels, etc. after loading it in the main form. With this
structure results of the subform, e.g., data obtained from the user, is
"returned" to the main form by writing into the control fields of the main
form from the dotheform code in the subform. This seems to be powerful
enough for my needs, and I never have to pass forms as arguments.

Ed

"Aaron" wrote in message
...
Thanks for the Reply Ed,

Now when I implement the code, I have this kind of thing
Public Function FillSize(Obj)
For i = 1 To Obj.cmbSize.ListCount
'Removes an item from the Combo Box
Obj.cmbSize.RemoveItem 0
Next i
With Obj.cmbSize
.AddItem "AddStuff" 'Add to combo box by reading excel
sheet
End With
End Function
And I send the form to the function using
FillSize(frmName)

However, on the line (and Im sure on the lines afterwards)
'For i = 1 To Obj.cmbSize.ListCount'

I get "RunTime error 438, Object doesnt support this property or method."
I'm not sure how to fix this problem and I am not sure which datatype
'Obj'
should be. I also get the same error when I set Obj As Object. Any code
examples or anything where something similar is done would help me a lot
as I
cant seem to find any anywhere.

Any input is greatly appreciated. Thanks.
--
Aaron


"Ed Sowell" wrote:

Aaron,
Since it's a Public function it can be called from the code for any form.

Also, you can refer to the controls of any form anywhere by using the
form
name. E.g.,

frmMyForm.cboList

Ed

"Aaron" wrote in message
...
Hi,
Is there a way to pass a form to a function in VBA. For example, I have
created several userforms all of which have a combobox that I want
filled
using the same set of code. Instead of including this code in each of
the
forms code, I want to make this a function in a module and have the
form
just
call the function to fill the combobox. The function would accept the
form
name or whatever and use it to fill the combobox.
I am new to VBA and have tried using
Public Function FillSize(Obj As MSForms.UserForm)
For i = 1 To Obj.cmdSize.ListCount
'Removes an item from the Combo Box
Obj.cmdSize.RemoveItem 0
Next i

With Obj.cmdSize
.AddItem "AddStuff" 'Add to combo box by reading excel
sheet

End With
End Function

And I would call the function using
FillSize(Me)
OR
FillSize(UserForm_Name)

Unfortunately I am not the most experienced of programmers and I am
unsure
how to accomplish this, if my code is even a step in the right
direction,
or
even if it possible to accomplish what Im asking.

Thanks for any help in advance,
--
Aaron





All times are GMT +1. The time now is 08:03 AM.

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