search
Japanese Chinese Nederlands Espanol Italiano Deutsch Francais Twitter Rss Feeds
.NET Framework GroupsView
Deployment Server
.NET Distributed_Apps
.NET
.NET ADO.NET
.NET ASP.NET
.NET ASP.NET Security
.NET ASP.NET Webcontrols
.NET ASP.NET Web Services
.NET Clr
.NET Compact Framework
.NET Drawing
.NET Interop
.NET Micro Porting
.NET Performance
.NET Web Services
.NET Windows Forms
.NET Windows Forms Controls
.NET General
.NET Csharp
.NET Visual Basic
.NET Vc
.NET Security
.NET Xml
Scripting Jscript
Scripting Visual Basicscript
Scripting Wsh
Smartphone Developer
Visual Basic Com
Visual Basic Controls
Visual Basic Crystal
Visual Basic Database Ado
Visual Basic Syntax
Visual Basic Vista Compatibility
Visual Basic Winapi
Vc Atl
Vc Debugger
Vc Language
Vc Mfc
Vc Stl
Visio Developer Visual Basica
Vsnet Debugging
Windows Powershell
Windowsce Embedded Vc
Xml
Xsl

Group SummariesView
.NET Framework
Access
BizTalk
Certifications
CRM
DDK
Exchange Server
FoxPro
French
French .NET
Games
German
German .NET
Graphic Design
IIS
Internet
ISA Server
Italian
Italian .NET
Maps
MCIS
Miscellaneous
Mobile Application Development
Money
MSN
Networking
Office
Ops Mgr
Publisher
Security
SharePoint
Small Business
Spanish
Spanish .NET
SQL Server
Systems Management Server
Transaction Server
Virtual PC / Virtual Server
Visual Studio
Win32
Windows 2000
Windows 2003 Server
Windows 7
Windows Live
Windows Media
Windows Update
Windows Vista
Windows XP
 

View All Microsoft NET Visual Basic Posts  Ask A New Question 

If statement not catching on conditions - Lloyd Sheen

Wednesday, October 29, 2008 1:27 PM

Any = Or
All = And

your statement wants all the conditions to be met before the exit will
occur.

LS
reply
 

Did you want an OR connector instead of AND? - Bet

Wednesday, October 29, 2008 1:34 PM

Did you want an OR connector instead of AND?
You said: should catch if ANY of the conditions are met

Would
If (not boolDSIFlushGapReading) OR (muxClass.DSIValues.Count < 2) OR
(muxClass.COM1Active <> 1) Then

do it?
reply

If statement not catching on conditions - Jack Jackson

Wednesday, October 29, 2008 1:39 PM

On Wed, 29 Oct 2008 10:20:57 -0700 (PDT), cmdolcet69


Your statement says to execut the Exit Sub only if all three
conditions are met.  In your example the first one is not met and the
other two are.

Apparently you want Or instead of And.  An Or test is true if either
item is true, and And test is true of both items are true.

Also, you should use AndAlso and OrElse instead of And and Or for
tests like this.
reply

If statement not catching on conditions - Armin Zingler

Wednesday, October 29, 2008 3:51 PM

First I thought it could be a matter of operator precedence
(http://msdn.microsoft.com/en-us/library/fw84t893.aspx), but it's correct.

You expect the program to exit. Have you tested if the "Exit sub" statement
is reached (Debug.Print)? Or maybe it is reached but it doesn't cause the
expected behavior? Exit Sub exits the sub, not the program.


Armin
reply

If statement not catching on conditions - Armin Zingler

Wednesday, October 29, 2008 4:45 PM

It's possible that debugging has an influence on the result, in particular
as you are handling COM ports here (I guess) where the state can change
while debugging. For example, if you set a breakpoint and examine the
values, they can be different from those if you had not interrupted the
execution. Therefore, try this:

debug.write(boolDSIFlushGapReading & " ")
debug.write(muxClass.DSIValues.Count & " ")
debug.writeline(muxClass.COM1Active)

If boolDSIFlushGapReading = False And muxClass.DSIValues.Count < 2 _
And Not muxClass.COM1Active = 1 Then
debug.writeline("exit sub")
Exit Sub
End If


I can not debug it here, so maybe exit sub is reached but the function is
called again and you think it is never left? I don't know. Is "exit sub"
ever shown in the debug/output window? Do you ever get the value combination
that you think should make the sub exit?



Armin
reply

If statement not catching on conditions - Jack Jackson

Wednesday, October 29, 2008 6:37 PM

On Wed, 29 Oct 2008 11:38:16 -0700 (PDT), cmdolcet69


I don't understand what behavior you want.

In the example above, it would not exit because only one of the
conditions is true, and when you use And all must be true.

If you use Or, then if any condition is true it will exit, so in your
example above if you changed the Ands to Ors (or preferrably OrElse)
it would exit since muxClass.DSIValues.Count is < 2.
reply

Why are you not reading what everybody writes, but does not want to give you - Cor Ligthert[MVP]

Thursday, October 30, 2008 1:12 AM

Why are you not reading what everybody writes, but does not want to give you
the fish but tries to teach you how to catch the fish.

Here is the fish

\\\
If boolDSIFlushGapReading = False OrElse muxClass.DSIValues.Count < 2 OrElse
muxClass.COM1Active <> 1 Then
Exit Sub
End If
///

This means that if any of this tests is true, then it will Exit Sub

Do they all have to be true then it is

\\\
If boolDSIFlushGapReading = False AndAlso muxClass.DSIValues.Count < 2
AndAlso
muxClass.COM1Active <> 1 Then
Exit Sub
End If
///


Cor
reply

If statement not catching on conditions - Andrew Morton

Thursday, October 30, 2008 6:43 AM

This is why everyone is saying to use "or" rather than "and": you're not
translating English into computer the right way round.

English: let's have all the apples and bananas->let's have all the apples
and let's have all the bananas

Computer: (all the items where x is an apple) + (all the items where x is a
banana)

Logically, the + translates to "or", not "and".


If in doubt, write it as three separate conditions to make it obvious:

if not(boolDSIFlushGapReading) then
exit sub
end if

if MuxClass.DSIValues.count < 2 then
exit sub
end if

if muxClass.COM1Active <> 1 then
exit sub
end if

Remember the syntax is "if <boolean> then...", so you shouldn't test boolean
values: you should treat it directly as a boolean, which is why I changed
your "If boolDSIFlushGapReading = False" to "if
not(boolDSIFlushGapReading)".

Also, I think that "if muxClass.COM1Active <> 1" is easier to read than "if
Not muxClass.COM1Active = 1".

HTH

Andrew
reply

If statement not catching on conditions - cmdolcet69

Thursday, October 30, 2008 6:45 AM

I have the below if statement, that should catch if any of the
conditions are met.....however for some reasons if my
boolDSIFlushGapReading = true and MuxClass.DSIValues.count =1 and my
muxclass.COM1Active =1 it will not exit the program??? Why is that can
anyone help me

Urgent!!!!!!



If boolDSIFlushGapReading = False And muxClass.DSIValues.Count < 2 And
Not muxClass.COM1Active = 1 Then
Exit Sub
End If
reply

If statement not catching on conditions - cmdolcet69

Thursday, October 30, 2008 6:45 AM

Ok a step further lets say:
boolDSIFlushGapReading =3D true and MuxClass.DSIValues.count =3D1 and my
muxclass.COM1Active =3D2 it will not exit the program???

How can I fix that.......
reply

If statement not catching on conditions - cmdolcet69

Thursday, October 30, 2008 6:45 AM

y
n
d

No what happends is that DSIValues.Count can =3D1 but then the
muxclass.COM1Active =3D 0
The only wat it doesn;t exist is that DSIValues.Count can =3D2 but then
the muxclass.COM1Active =3D 1 or

DSIValues.Count can =3D1 but then the muxclass.COM2Active =3D 2
reply

If statement not catching on conditions - cmdolcet69

Thursday, October 30, 2008 6:45 AM

y
.
nt

Armin it never exit the Sub and that all I want it to do is exit the
sub
reply

"easier to read" is open to debate (although I don't disagree), but if Not - James Hahn

Thursday, October 30, 2008 6:35 PM

if Not muxClass.COM1Active = 1
relies on precedence, whereas
if muxClass.COM1Active <> 1
does not.  Barely significant in this example, but it can save a lot of
headscratching in more complex cases.
reply

If statement not catching on conditions - Bet

Monday, November 03, 2008 11:41 AM

I thought my threads were weird.

James, do you mean:
Not muxClass.COM1Active = 1
is interpreted as:
(Not muxClass.COM1Active) = 1
which would never be true, because true equates to -1, false to 0, and is
different from:
Not (muxClass.COM1Active = 1)

parens can be your friends...

maybe the whole problem is he should be testing for -1 instead of 1,
I don't know.
reply

No. The two expressions are equivalent. - James Hahn

Monday, November 03, 2008 3:42 PM

No. The two expressions are equivalent. I was simply commenting that the
form
Not muxClass.COM1Active = 1
relies on
muxClass.COM1Active = 1
having a higher precedence than the Not. My preference is for having an
expression that doesn't rely on the default precedence rules, therefore I
would use either
Not (muxClass.COM1Active = 1)
which makes it explicit or (much simpler)
if muxClass.COM1Active <> 1

So not only does it _look_ more sensible but there's some programming sense
behind the choice - just a tiny bit in this case, but possibly relevant in
more complex cases. The original code was complicated enough without the
possibility of misunderstanding the implied precedence rules.
reply

so you're saying you don't like the left-to-right thing being overridden by - Bet

Monday, November 03, 2008 5:30 PM

so you're saying you don't like the left-to-right thing being overridden by
the precedence rules, because who remembers the precedence rules anyways (I
don't, obviously.  I use parens.)

I don't know why this guy's confused, then.
reply

I don't think anyone knows why OP is confused because he never comes back to - James Hahn

Monday, November 03, 2008 6:05 PM

I do not think anyone knows why OP is confused because he never comes back to
indicate whether or not he worked it out.  He just asks another question
from somewhere else in the project.
reply