Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.excel.programming
|
|||
|
|||
UNDERSTANDING VARIABLE SCOPE
I am trying to maintain variables value so when I return to a userform that
has already been used, it will already be filled out (as long as the user has previously visited it. I thought declaring the variables as public at the module level would make them visible in all subs but it is not working. In module 3 I have variables declared as public. In the sub, the variables are not declared because I want to use to publics but they seem to get over written when they are assigned a value. ie. MODULE 3 public v1 as string public v2 as string private sub MyButton_click() v1 = "myValue" v2 = "myValue" end sub The watch window shows <Out of context after values have been assigned inside the sub. |
#2
Posted to microsoft.public.excel.programming
|
|||
|
|||
UNDERSTANDING VARIABLE SCOPE
The values in the form are being discarded because you are unloading the
form. Instead of unloading the form just hide it. By doing this the values will not be lost and you will not need to store them anywhere. The next time you show the forms it look just like th user left it before it was hidden. -- HTH... Jim Thomlinson "-JEFF-" wrote: I am trying to maintain variables value so when I return to a userform that has already been used, it will already be filled out (as long as the user has previously visited it. I thought declaring the variables as public at the module level would make them visible in all subs but it is not working. In module 3 I have variables declared as public. In the sub, the variables are not declared because I want to use to publics but they seem to get over written when they are assigned a value. ie. MODULE 3 public v1 as string public v2 as string private sub MyButton_click() v1 = "myValue" v2 = "myValue" end sub The watch window shows <Out of context after values have been assigned inside the sub. |
#3
Posted to microsoft.public.excel.programming
|
|||
|
|||
UNDERSTANDING VARIABLE SCOPE
Hey Jim,
That shouldn't be it. It would be true if the variables were declared in the form, but if the variables are declared in a normal code module, as the OP states, their scope extends beyond the life of the form. It sounds as if the OP has also declared them as class variables in the form, and so the form uses them, but that is just a guess. -- HTH RP (remove nothere from the email address if mailing direct) "Jim Thomlinson" wrote in message ... The values in the form are being discarded because you are unloading the form. Instead of unloading the form just hide it. By doing this the values will not be lost and you will not need to store them anywhere. The next time you show the forms it look just like th user left it before it was hidden. -- HTH... Jim Thomlinson "-JEFF-" wrote: I am trying to maintain variables value so when I return to a userform that has already been used, it will already be filled out (as long as the user has previously visited it. I thought declaring the variables as public at the module level would make them visible in all subs but it is not working. In module 3 I have variables declared as public. In the sub, the variables are not declared because I want to use to publics but they seem to get over written when they are assigned a value. ie. MODULE 3 public v1 as string public v2 as string private sub MyButton_click() v1 = "myValue" v2 = "myValue" end sub The watch window shows <Out of context after values have been assigned inside the sub. |
#4
Posted to microsoft.public.excel.programming
|
|||
|
|||
UNDERSTANDING VARIABLE SCOPE
Not how I read the question but who knows. My understanding was that the OP
wanted the values that last populated a form to persist until the next time the form was shown. If the form is unloaded then the values are lost. This being the case the OP wanted to store those values globally and then populate the form with these stored values the next time the form was shown. If the form is hidden instead of unloaded tehn the values are not lost and there is no need to store the values globally. But is is a little unclear and I see your point. Jeff if we have not answered your question or if you are more confused than when you first asked just reply back and perhaps we can get you on track. -- HTH... Jim Thomlinson "Bob Phillips" wrote: Hey Jim, That shouldn't be it. It would be true if the variables were declared in the form, but if the variables are declared in a normal code module, as the OP states, their scope extends beyond the life of the form. It sounds as if the OP has also declared them as class variables in the form, and so the form uses them, but that is just a guess. -- HTH RP (remove nothere from the email address if mailing direct) "Jim Thomlinson" wrote in message ... The values in the form are being discarded because you are unloading the form. Instead of unloading the form just hide it. By doing this the values will not be lost and you will not need to store them anywhere. The next time you show the forms it look just like th user left it before it was hidden. -- HTH... Jim Thomlinson "-JEFF-" wrote: I am trying to maintain variables value so when I return to a userform that has already been used, it will already be filled out (as long as the user has previously visited it. I thought declaring the variables as public at the module level would make them visible in all subs but it is not working. In module 3 I have variables declared as public. In the sub, the variables are not declared because I want to use to publics but they seem to get over written when they are assigned a value. ie. MODULE 3 public v1 as string public v2 as string private sub MyButton_click() v1 = "myValue" v2 = "myValue" end sub The watch window shows <Out of context after values have been assigned inside the sub. |
#5
Posted to microsoft.public.excel.programming
|
|||
|
|||
UNDERSTANDING VARIABLE SCOPE
Will try that. I unload it because I thought I had to in order to open up
other forms dependingon what buttons are clicked. How do I create a public variable that is visible to all of the userform control subs? I have been coding all of my VBA in the userform control subs, would it be better practice (or easier to control) to have the click() subs call procedures in a module and then return? -JEFF- "Jim Thomlinson" wrote: The values in the form are being discarded because you are unloading the form. Instead of unloading the form just hide it. By doing this the values will not be lost and you will not need to store them anywhere. The next time you show the forms it look just like th user left it before it was hidden. -- HTH... Jim Thomlinson "-JEFF-" wrote: I am trying to maintain variables value so when I return to a userform that has already been used, it will already be filled out (as long as the user has previously visited it. I thought declaring the variables as public at the module level would make them visible in all subs but it is not working. In module 3 I have variables declared as public. In the sub, the variables are not declared because I want to use to publics but they seem to get over written when they are assigned a value. ie. MODULE 3 public v1 as string public v2 as string private sub MyButton_click() v1 = "myValue" v2 = "myValue" end sub The watch window shows <Out of context after values have been assigned inside the sub. |
#6
Posted to microsoft.public.excel.programming
|
|||
|
|||
UNDERSTANDING VARIABLE SCOPE
If the form is not unloaded then you do not need to store the value. You can
just have the one form reference the values of the other form. Something like userform2.textbox1.text = userform1.textbox1.text This works so long as user form 1 is loaded. If not then it will throw an error. If you want to use global variables to store values they should be created (most likely) in modules. This is because modules run for the duration of the program. Forms will go in and out of existence and globals will be created and destroyed with the form. That being said if the global only makes sense if the form is in existence then put it in the form. It will only be created with the form and end with the form and this is a more efficent use of memory. -- HTH... Jim Thomlinson "-JEFF-" wrote: Will try that. I unload it because I thought I had to in order to open up other forms dependingon what buttons are clicked. How do I create a public variable that is visible to all of the userform control subs? I have been coding all of my VBA in the userform control subs, would it be better practice (or easier to control) to have the click() subs call procedures in a module and then return? -JEFF- "Jim Thomlinson" wrote: The values in the form are being discarded because you are unloading the form. Instead of unloading the form just hide it. By doing this the values will not be lost and you will not need to store them anywhere. The next time you show the forms it look just like th user left it before it was hidden. -- HTH... Jim Thomlinson "-JEFF-" wrote: I am trying to maintain variables value so when I return to a userform that has already been used, it will already be filled out (as long as the user has previously visited it. I thought declaring the variables as public at the module level would make them visible in all subs but it is not working. In module 3 I have variables declared as public. In the sub, the variables are not declared because I want to use to publics but they seem to get over written when they are assigned a value. ie. MODULE 3 public v1 as string public v2 as string private sub MyButton_click() v1 = "myValue" v2 = "myValue" end sub The watch window shows <Out of context after values have been assigned inside the sub. |
#7
Posted to microsoft.public.excel.programming
|
|||
|
|||
UNDERSTANDING VARIABLE SCOPE
I had't refreshed when I posted my last so I didn't see this one. I do need
to know how to create and use public variables but what I am trying to accomplish here is, I need to keep the info entered into a form so the user can have an opportunity to return and make corrections. The catch is I need to be able to determine if it is the first time or if the user is returning to make corrections. -JEFF- "Jim Thomlinson" wrote: Not how I read the question but who knows. My understanding was that the OP wanted the values that last populated a form to persist until the next time the form was shown. If the form is unloaded then the values are lost. This being the case the OP wanted to store those values globally and then populate the form with these stored values the next time the form was shown. If the form is hidden instead of unloaded tehn the values are not lost and there is no need to store the values globally. But is is a little unclear and I see your point. Jeff if we have not answered your question or if you are more confused than when you first asked just reply back and perhaps we can get you on track. -- HTH... Jim Thomlinson "Bob Phillips" wrote: Hey Jim, That shouldn't be it. It would be true if the variables were declared in the form, but if the variables are declared in a normal code module, as the OP states, their scope extends beyond the life of the form. It sounds as if the OP has also declared them as class variables in the form, and so the form uses them, but that is just a guess. -- HTH RP (remove nothere from the email address if mailing direct) "Jim Thomlinson" wrote in message ... The values in the form are being discarded because you are unloading the form. Instead of unloading the form just hide it. By doing this the values will not be lost and you will not need to store them anywhere. The next time you show the forms it look just like th user left it before it was hidden. -- HTH... Jim Thomlinson "-JEFF-" wrote: I am trying to maintain variables value so when I return to a userform that has already been used, it will already be filled out (as long as the user has previously visited it. I thought declaring the variables as public at the module level would make them visible in all subs but it is not working. In module 3 I have variables declared as public. In the sub, the variables are not declared because I want to use to publics but they seem to get over written when they are assigned a value. ie. MODULE 3 public v1 as string public v2 as string private sub MyButton_click() v1 = "myValue" v2 = "myValue" end sub The watch window shows <Out of context after values have been assigned inside the sub. |
#8
Posted to microsoft.public.excel.programming
|
|||
|
|||
UNDERSTANDING VARIABLE SCOPE
Forms have an initailize event which only fires when the form is first
created and and activate event which is fired when the form is shown. Using these you can know if the user has been there or not. -- HTH... Jim Thomlinson "-JEFF-" wrote: I had't refreshed when I posted my last so I didn't see this one. I do need to know how to create and use public variables but what I am trying to accomplish here is, I need to keep the info entered into a form so the user can have an opportunity to return and make corrections. The catch is I need to be able to determine if it is the first time or if the user is returning to make corrections. -JEFF- "Jim Thomlinson" wrote: Not how I read the question but who knows. My understanding was that the OP wanted the values that last populated a form to persist until the next time the form was shown. If the form is unloaded then the values are lost. This being the case the OP wanted to store those values globally and then populate the form with these stored values the next time the form was shown. If the form is hidden instead of unloaded tehn the values are not lost and there is no need to store the values globally. But is is a little unclear and I see your point. Jeff if we have not answered your question or if you are more confused than when you first asked just reply back and perhaps we can get you on track. -- HTH... Jim Thomlinson "Bob Phillips" wrote: Hey Jim, That shouldn't be it. It would be true if the variables were declared in the form, but if the variables are declared in a normal code module, as the OP states, their scope extends beyond the life of the form. It sounds as if the OP has also declared them as class variables in the form, and so the form uses them, but that is just a guess. -- HTH RP (remove nothere from the email address if mailing direct) "Jim Thomlinson" wrote in message ... The values in the form are being discarded because you are unloading the form. Instead of unloading the form just hide it. By doing this the values will not be lost and you will not need to store them anywhere. The next time you show the forms it look just like th user left it before it was hidden. -- HTH... Jim Thomlinson "-JEFF-" wrote: I am trying to maintain variables value so when I return to a userform that has already been used, it will already be filled out (as long as the user has previously visited it. I thought declaring the variables as public at the module level would make them visible in all subs but it is not working. In module 3 I have variables declared as public. In the sub, the variables are not declared because I want to use to publics but they seem to get over written when they are assigned a value. ie. MODULE 3 public v1 as string public v2 as string private sub MyButton_click() v1 = "myValue" v2 = "myValue" end sub The watch window shows <Out of context after values have been assigned inside the sub. |
#9
Posted to microsoft.public.excel.programming
|
|||
|
|||
UNDERSTANDING VARIABLE SCOPE
Jeff,
I have posted a sample workbook at http://cjoint.com/?iyxvpLS2bJ Download it, click the button, enter some valid date, and then click OK again. Then repeat. Analyse the code to see how it happens. -- HTH RP (remove nothere from the email address if mailing direct) "Jim Thomlinson" wrote in message ... Not how I read the question but who knows. My understanding was that the OP wanted the values that last populated a form to persist until the next time the form was shown. If the form is unloaded then the values are lost. This being the case the OP wanted to store those values globally and then populate the form with these stored values the next time the form was shown. If the form is hidden instead of unloaded tehn the values are not lost and there is no need to store the values globally. But is is a little unclear and I see your point. Jeff if we have not answered your question or if you are more confused than when you first asked just reply back and perhaps we can get you on track. -- HTH... Jim Thomlinson "Bob Phillips" wrote: Hey Jim, That shouldn't be it. It would be true if the variables were declared in the form, but if the variables are declared in a normal code module, as the OP states, their scope extends beyond the life of the form. It sounds as if the OP has also declared them as class variables in the form, and so the form uses them, but that is just a guess. -- HTH RP (remove nothere from the email address if mailing direct) "Jim Thomlinson" wrote in message ... The values in the form are being discarded because you are unloading the form. Instead of unloading the form just hide it. By doing this the values will not be lost and you will not need to store them anywhere. The next time you show the forms it look just like th user left it before it was hidden. -- HTH... Jim Thomlinson "-JEFF-" wrote: I am trying to maintain variables value so when I return to a userform that has already been used, it will already be filled out (as long as the user has previously visited it. I thought declaring the variables as public at the module level would make them visible in all subs but it is not working. In module 3 I have variables declared as public. In the sub, the variables are not declared because I want to use to publics but they seem to get over written when they are assigned a value. ie. MODULE 3 public v1 as string public v2 as string private sub MyButton_click() v1 = "myValue" v2 = "myValue" end sub The watch window shows <Out of context after values have been assigned inside the sub. |
#10
Posted to microsoft.public.excel.programming
|
|||
|
|||
UNDERSTANDING VARIABLE SCOPE
Thanks everybody for your help. One problem I have corrected is that I was
trying to use input boxes on a userform and have now switched to text boxes which stores the data to the myBox.text. Much easier to work with. "-JEFF-" wrote: I am trying to maintain variables value so when I return to a userform that has already been used, it will already be filled out (as long as the user has previously visited it. I thought declaring the variables as public at the module level would make them visible in all subs but it is not working. In module 3 I have variables declared as public. In the sub, the variables are not declared because I want to use to publics but they seem to get over written when they are assigned a value. ie. MODULE 3 public v1 as string public v2 as string private sub MyButton_click() v1 = "myValue" v2 = "myValue" end sub The watch window shows <Out of context after values have been assigned inside the sub. |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
variable scope | Excel Programming | |||
scope/ lifetime of variable | Excel Programming | |||
scope/ lifetime of variable | Excel Programming | |||
Variable Scope | Excel Programming | |||
Variable scope | Excel Programming |