Breaking User Form Code into modules question
The core answer to all of your questions is really that it depends on what
you put into the code as to what it will do. The programmer is in control
and the processor is only as smart as the programmer.
If you have six sub procedures in module1, you can use other code to call
those six procedures in any order you wish to call them in. However, if you
have written those procedures in a fashion that make one reliant upon
another, then you would need to run those in a specific order to get the
desired results. Otherwise, they can run independently and in any order.
Terminology is important. When I refer to calling a procedure, I mean that
a line of code initiates a procedure. That line of code is simply the
procedure name. If a procedure is named myMacro and it has no variable
arguments in the title line of the procedure, then all that is needed to
call it is the name:
myMacro
That will initiate that procedure. If the procedure has arguments then it
would be called:
Call myMacro("arg1")
The conventions are in the VBA help file for calling procedures.
The same six procedures can be manually initiated individually by assigning
keyboard shortcuts to them, or assigning them to individual command buttons.
Like Chip said, a lot of flexibility when they are in the public module.
What you cannot do is run an event procedure from the public module while it
has the event code title line. That means that:
Private Sub CommandButton1_Click()
'some code here
End Sub
would not run. You will hear a beep. At least my computer beeps if I try
it.
Any event code must be executed from an appropriate code window.
Worksheet_Change from a worksheet code module, Workbooks_Open from the
ThisWorkbook code module, UserForm_Initialize from a UserForm code module.
The internal operation of the VBA compiler is geared to ignore these title
lines if they are not in the appropriate code module, but it will beep to
let you know that something is not right. I don't know why they did not
make an error message for that.
"Brian" wrote in message
...
Lets say I take a really big Sub Procedure that is in the User Form Code
Window and break it down into 6 smaller subs and put the 6 subs into a
module.
Now I have 6 Small Subs sitting there in a module. In place of the Big Sub
Procedure can I put a call statement there to call the Smaller Subs?
Can I just call the entire module to run or do I need to call each Smaller
Sub to run 1 at a time. I assume they will run in the order they are in.
Is
this the same as example you gave me?
Module1
Sub1
Sub2
Sub3
Located in the Main User Form Code Window
-----------------------------------------------------
Sub Main()
Macro1
MsgBox "Macro1 Completed"
Macro2
MsgBos "Macro2 Completed"
Macro3
MsgBox "Program Completed"
End Sub
Located in the Module
-------------------------------------------
Sub Macro1()
'Declarations
'Variable assignment
'Code body
End Sub
Sub Macro2()
'Same pincipal as Macro1
End Sub
Sub Macro3()
'Same principal as Macro1
End Sub
Did I get it correct or am I still missing something?
"JLGWhiz" wrote:
P.S. If you need to call an event procedure from outside its host object
(i.e. UserForm or Sheet) then you probably did not need an event
procedure
to begin with. It should have been written as a public Sub procedure and
then called by the event code if needed for the event, instead of the
reverse of trying to call an event procedure from a public code window.
"Brian" wrote in message
...
I was hoping to make all the modules Private Sub. I do not want them
being
changed after I am done.
All the subs in the User Form are are Private. Can I just cut and paste
them
into a module and then in User Code Window call that Sub.
Private Sub Update_Installer_Forms_10_Click()
Call Update_Installer_Forms_10_Click() 'Macro1 located
in
Module1
End Sub
"JLGWhiz" wrote:
Hi Brian,
1: My question is in the UserForm Code Window how do I refer to a
module?
A1: You can call any procedure that is in the public modules
(Module1,
Mocule2, etc.) from the UserForm code module. If you are using event
code
to respond to some user's interaction, then in the event code you
would
call
the working procedure out of the public module:
Private Sub Listbox1_Click()
Call Macro1 'Macro1 located in Module1
End Sub
2: If the Code is to large can one Module call another module?
Something like User form Code calls Module 1 and at the end of
module
1
code, it calls for module 2, etc...
A2: Yes, any public module can call from and respond to any other
public
module.
..
3: Most of my Code is With statements / End With then more code.
A3: So? That is just a style of writing code. I do not believe
it
would influence whether the code can be called from another module or
not.
As a general rule, private procedures can call any public procedure,
but
the
reverse is not necessarily true.
"Brian" wrote in message
...
I have a user form with alot of code in it. As of now all the code is
in
the
Userform
Code window, but there is so much code that it's getting confusing.
I
have
one Sub that is to large and needs to be split into several subs.
When I was done I was going to break all the Subs down into
different
modules to clean it up. I guess I will have to do that now, but I am
not
sure
how to do it.
1: My question is in the UserForm Code Window how do I refer to a
module?
2: If the Code is to large can one Module call another module?
Something like User form Code calls Module 1 and at the end of
module 1
code, it calls for module 2, etc....
3: Most of my Code is With statements / End With then more code.
Here is an Example of the Code in the UserForm Code Window:
Private Sub Update_Installer_Forms_10_Click()
With Workbooks("Master Installer Forms.xlsm").Sheets("Install Pack
Con")
**Code for the sub is here**
End With
With Workbooks("Master Installer Forms.xlsm").Sheets("Install Chk
List")
**Code for the sub is here**
End With
End Sub
I really need to sort this out so it's not so confusing to work on.
Can
anyone please help me or explain it in english to me.
.
.
|