View Single Post
  #2   Report Post  
Posted to microsoft.public.excel.programming
Philo Hippo Philo Hippo is offline
external usenet poster
 
Posts: 9
Default Public variable defintion (newbie)

Hi Gregga,

A Public variable is availble to all objects within the Parent project, ie:
not to another workbook, but to all Forms and Modules within that one
Project.

Second, Forms content are always Private to themselves, ie: the Forms
themselves, that way you can have many forms with objects with the same
name, ie: cmdOKButton, cmdCancelButton, etc...
You can however use the Friend and Public method to let some code within a
Form accessible by other objects than the form itself. If you need to do
that though, I suggest you do as I do, which is to create a Module named
after the Form so I remember later what it does, and use Public statements
so that the code within that Module can be used by all other objects in the
projects.

"gregga" wrote in message
...

I have two questions.

Is a public variable visible to all sub procedures in all modules but
just under one workbook? In this case a public variable has been
declared in a module under Personal.xls, but I also have another
workbook containing macros but am confused as to whether a public var
is visible to all workbooks - I only want it visible under
Personal.xls.

Lastly, I've created a userform whereby the user has 3 options (using
option buttons) and an OK and CANCEL button. I noticed the
"CommandButton1_Click()" userform is always preceded my
"private"...namely -

Private Sub CommandButton1_Click()

If OptButton_All Then
arSelect = Array("N3", "N2", "O-P", "SO4")
Else
If OptButton_SulphateOnly Then
arSelect = Array("SO4")
Else
If OptButton_ExcludeSulphate Then
arSelect = Array("N3", "N2", "O-P")
Else
MsgBox "You must select an option!"
Hide
Show

End If
End If
End If


Unload Me


End Sub


The array "arSelect" is declared as "Public arSelect As Variant" at the
very start of module 1. The module then opens the userform. The
userform captures the selection and assigns a series of value(s) to
arSelect. I want arSelect to be available to module1.

I noticed that if I changed the "Private Sub CommandButton1_Click()" to
"*Public* Sub CommandButton1_Click()" then arSelect is then available to
module 1, but refuses to work if it is Private.

I guess I've answered my own question, but why does a userform
automatically delcare procedures as private?

Thanks.


--
gregga
------------------------------------------------------------------------
gregga's Profile:

http://www.excelforum.com/member.php...fo&userid=9875
View this thread: http://www.excelforum.com/showthread...hreadid=267105