"bisecting" loop with boolean flags
By all means go the static approach if it works for you. It is probably
a cleaner approach unless other procedures need access to the same
flag. Still - the Public variable approach should work. I just tried
the following code to check my sanity (which is often an open
question):
Public Flg As Boolean
Public Sub Insert_Flag()
Select Case Flg
Case True
Flg = False
If Flg = False Then Cells(1, 3) = False
Case False
Flg = True
If Flg = True Then Cells(1, 3) = True
End Select
End Sub
It toggles back and forth for me with no problem.
Are you sure that you declared the public variable *outside* the
procedure? If you did, are you sure that you eliminated the local
variable declaration *inside* the procedure as well? Any local
declaration would hide any global declaration within the scope of the
procedure.
-John Coleman
Kragelund wrote:
Dear John & Niek,
thanks a bunch for your input, I had no idea I needed to declare a static
variable. I did as you suggested, John, but unfortunately, the procedure
still doesn't toggle anywhere away from FALSE. Could there be any other
points I should take into consideration? I am running the procedure from
general code module (not a worksheet one).
Thanks in advance
Henrik
"John Coleman" wrote:
You have declared Flg to be a local (private) variable to the
procedure. You need a public variable. In a general code module,
outside of any sub or function, have the line
Public Flg as Boolean
and delete the line
Dim Flg as Boolean
from your code. This will toggle back and forth, It will start false
when you open Excel or whenever you reset the project. If you want
persistence across sessions you need to do something like hide the flag
in an out-of-the-way cell or something fancier like a registry setting
or entry in the names collection.
HTH
-John Coleman
Kragelund wrote:
Help pls! I need a procedure which can help me to select a selection A and B
respectively, so that selection A is chosen every other time the procedure
runs (and the same for selection B). I intended to make a procedure that sets
the flag to TRUE when the flag is FALSE and vice versa. In the code presented
below, the boolean value remains FALSE and never changes to TRUE.
What I am doing wrong??
Public Sub Insert_Flag()
Dim Worksheet As Worksheet
Dim Flg As Boolean
Set Worksheet = ActiveSheet
Select Case Flg
Case Flg = True (Selection A)
Flg = False
If Flg = False Then Cells(1, 3) = False
Case Flg = False (Selection B)
Flg = True
If Flg = True Then Cells(1, 3) = True
End Select
End Sub
|