Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.excel.programming
|
|||
|
|||
Multiple User Forms
"Marcotte A" wrote in message
... 1) Can you have multiple userforms in memory at the same time? Yes If so, can variables defined or by one form be passed to another (without a global variable). eg. I will have one form for the user to select a store; then the next form would have them enter sales data for that store. You can either access a variable in the calling form from the called form or vice cersa. In each case, the variable should be declared as a Public variable within that form For instnace in useform1 Userform2.StoreName = Textbox1.Text in userform2 Public StoreName As String Private Sub Userform_Initialize() Me.Textbox1.Text = StoreName End Sub 2) What is a good way to organize code for forms? I understand that each form has its own "module", but can code in these call functions and subs from other userforms or other modules? Yes, but you need to preceede it with the class name, for instance Userform2.Macro_To_Do_something 3) Since each store is exactly the same, can I use a tabstrip? How does VBA differentiate between the tabs? Like this? Private Sub TabStrip1_Change() Dim myTab as string select case tabstrip1.value case 0: myTab = "Sheet1" case 1: myTab = "Sheet2" End Select With ThisWorkbook.Worksheets(myTab) 'code to input data End With End Sub Not sure what you are tring to do. IF you just want to select which sheet, radio buttons would be better than tabstrips. 4) What is a good site or book that discusses userforms? I've read the MS article ("Lesson 11" I think) but am looking for a little bit more than that. Pass. |
#2
Posted to microsoft.public.excel.programming
|
|||
|
|||
Multiple User Forms
Just to add to what Bob has said...
The most important thing to learn about userforms is that they are classes, each one being a class in its own right (one class of type Userform1, another class of type Userform2 etc). You may have multiple instances of the same class e.g. Option Explicit Private m_FormA As UserForm1 Private m_FormB As UserForm1 Private m_FormC As UserForm1 Private Sub Workbook_Open() Set m_FormA = New UserForm1 m_FormA.Show vbModeless Set m_FormB = New UserForm1 m_FormB.Show vbModeless m_FormB.Move _ m_FormA.Left + 20, m_FormA.Top + 20 Set m_FormC = New UserForm1 m_FormC.Show vbModeless m_FormC.Move _ m_FormB.Left + 20, m_FormB.Top + 20 End Sub Classes have 'members': properties, methods and events. If you want a variable defined in an instance of a class to be made available externally, use a public property e.g. Option Explicit Private m_strUsername As String Public Property Get Username() As String Username = m_strUsername End Property Public Property Let Username(ByVal Newvalue As String) m_strUsername = Newvalue End Property If you want the property to be read-only, omit the Property Let. I will always advise against using public variables but they are *particularly* unsuitable for classes because they behave differently (counterintuitively) from public variables in standard modules. More details he http://msdn.microsoft.com/library/de...assmodules.asp Briefly, using a public variable only saves you writing your own Property Get/Let pair and thus gives you less flexibility. A most challenging aspect is how to make one instance of the class aware of the value of a property in another instance of the same class. Where to get a good discussion about userforms? Right here of course! Jamie. -- |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
user forms | Excel Discussion (Misc queries) | |||
Using multiple user forms to perform Calculations | Excel Programming | |||
VB user forms | Excel Programming | |||
User Forms | Excel Programming | |||
User forms in VBA | Excel Programming |