We need you!

We're working hard on the next version of Developer Fusion. Let us know what you think we should be up to!

Members

Technology Zones

Articles

Hosted By

MaximumASP

Info

Rated
Read 16,482 times

Related Categories

Ways to code numeric conditional expressions

Often in our tips, we present a technique in which we wish to determine
if a function returns a number, any number, as its result. If it does,
then we want the condition to pass. If it doesn't, then we want the
condition to fail. For instance, to see if a textbox contains any text
whatsoever, we'd use:

If Len(Text1) Then

Or, to determine if our application raised an error, we'd code

If Err.Number Then

Inevitably, when we use such syntax, we receive a number of letters
stating that our code will never work as published--that the only
correct way to evaluate a function's numeric values is with expressions
such as:

If Len(Text1) <> 0 Then

Or

If Err.Number <> 0 Then

While the suggested comparison expressions work, they illustrate just
one of two ways to write conditions for Visual Basic. As stated in the
Help files with regard to conditions in a conditional statement, such
as If...Then:

"The condition is usually a comparison, but it can be any expression
that evaluates to a numeric value. Visual Basic interprets this value
as True or False; a zero numeric value is False, and any nonzero
numeric value is considered True."

With this in mind, then our simplified syntax might evaluate, like so

If Len("Abba") Then

If 4 Then

which passes the test, since 4, being a non-zero value, evaluates to True.

Where our simplified syntax can cause unintended results is when you
use the keyword Not in conjunction with it. For instance, given our
previous statement, it may seem as if the following code:

If Not Len(Text1) Then
     MsgBox "Empty"
End If

would display the message box only when the textbox is empty. In fact,
as is the code always displays the message.

This is because when evaluating the condition, Visual Basic applies
the Not first. When applied to numbers, the Not keyword reverses the
number's sign, and then adds -1 to it. So, continuing with our previous
example, the current code would evaluate like this:

If Not Len("Abba") Then

If Not 4 Then

If -5 Then

And as we pointed out, any value other than 0 evaluates to True so the
condition passes the test--as does 0, which the Not keyword converts
to -1, also True.

To avoid this behavior when using the Not keyword with the simplified
syntax, use the CBool() function to force VB to convert the number
into a Boolean value before applying the Not keyword, like so:

If Not CBool(Len(Text1)) Then

© 2001 Element K Journals, a division of Element K Press LLC ("Element K"). Element K and the Element K logo are trademarks of Element K LLC

Comments