|
Operators
Here
are the VB operators used to perform mathematical operations on one or
more variables. Aside from the normal multiply/add/substract and divide,
you will find the AND, OR, Not Equal, MOD and Integer Division operators
very useful.
- / - Normal division
- \ - Integer division (truncates
the answer)
- ^ - Exponentiation operator
- * - Multiply
- + - Plus
- - - Minus
- = - Equal
- > - Greater Than
- < - Less Than
- <> - Not Equal
- >= - Greater than or equal
- <= - Less than or equal
- AND - Defines a boolean value
that is the AND of two values
- result = expression1 AND
expression2
- OR - Defines a boolean value
that is the OR of two values
- result = expression1 OR
expression2
- XOR - Defines a boolean value
that is the exclusive OR of two values
- result = expression1 XOR
expression2
- NOT - Defines an opposite boolean
value
- EQV - Performs a logical equivalence
on two expressions (result is true if both expressions are true)
- result = expression1 EQV
expression2
- IMP - Performs a logical implication
on two expressions
- result = expression1 IMP
expression2
- IS - Determines if 2 variables
reference the same object
- result = object1 IS object2
- LIKE - Determines if one string
matches a pattern
- result = string LIKE pattern
- MOD - Returns the integer remainder
of a division
Math
VB
also provides built-in functions which can act on variables. Most are
self-explanatory. In my experience, the VAL, RND, and ROUND functions
are among the most valuable, so be sure to pay close attention to them!
- Round - Rounds a number to
a selectable number of decimal places
- result = round ( tempvariable,2
)
- Val - Returns the numerical
content of a string
- Int - Returns an integer by
truncating (different than Fix)
- Fix - Returns an integer by
truncating (different than Int)
- Hex - Returns the hexadecimal
value of any number
- temp$ = hex ( tempvariable
)
- Oct - Returns the octal value
of any number
- temp$ = oct ( tempvariable
)
- Tan - Returns the tangent of
an angle
- tempvariable1 = tan ( tempvariable2
)
- Rnd - Returns a random number
between 0 and 1
- Randomize - Initializes the
Rnd function so it gives different answers each time
- Sgn - Returns the sign of a
number
- Sin - Returns the sine of an
angle
- tempvariable1 = sin ( tempvariable2
)
- Cos - Returns the cosine of
an angle
- tempvariable2 = cos ( tempvariable
)
- Abs - Converts a number to
a positive value
- Sqr - Returns the square root
of a number
- tempvariable1 = sqr ( tempvariable2
)
- Log - Returns the base 10 logarithm
of a number
- tempvariable1 = log ( tempvariable2
)
- Atn - Returns the arctangent
of an angle
- tempvariable1 = atn ( tempvariable
)
- Partition - Sort of an oddball
function but segregates values according to ranges
- Type Conversions - A variety
of conversion functions
- CBool, CByte, CCur, CDate,
CDbl, CDec, CInt, CLng, CSng, CStr, CVar
Strings
In
my experience these functions are used more than just about any of the
other VB built-in functions. The FORMAT, MID, and INSTR functions are
incredibly powerful and I use them extensively. If you don't understand
what they are, they are worth the time to figure out! The LEN and
CHR functions are also valuable as are the variations on the trim and
case functions.
- Left - Returns the left n characters
of a string
- temp$ = left$ ( teststring$,
4 )
- Right - Returns the right n
characters of a string
- temp$ = right$ ( teststring$,
4 )
- Trim - Removes leading and
trailing spaces of a string
- temp$ = trim$ ( teststring$
)
- LTrim - Removes only the leading
spaces of a string
- temp$ = ltrim$ ( teststring$
)
- RTrim - Removes only the trailing
spaces of a string
- temp$ = rtrim$ ( teststring$
)
- UCase - Makes all characters
upper case
- temp$ = ucase$ ( teststring$
)
- LCase - Makes all characters
lower case
- temp$ = lcase$ ( teststring$
)
- Mid - Returns n characters
from a string, starting a any position
- temp$ = mid$ ( teststring$,
1, 4 )
- Len - Returns the length of
a string (how many characters it has)
- temp$ = len ( teststring$
)
- LSet - Positions a string inside
another, flush to the left
- temp$ = lrset ( teststring$
)
- RSet - Positions a string inside
another, flush to the right
- temp$ = rset$ ( teststring$
)
- Format - Returns a string formatted
according to a user-defined format
- temp$ = format$ ( teststring$,
"####.0" )
- String -
- temp$ = left$ ( teststring$,
4 )
- Chr - Returns the string representation
of a number
- Asc - Returns the ASCII code
of a single character
- Space - Returns n spaces
- Instr - Determines if one string
is found within a second string
- i = Instr (starthere, string1,
string2)
- InStrRev - Determine if one
string is found in a second, starting at the end
- i = InStrRev (string1,
string2, start)
- StrComp - Compares two strings
- result = StrComp (string1,
string2)
- StrConv - Converts the case
of a string's characters
- StrConv (string, vbuppercase)
- StrReverse - Reverses character
order in a string
- Replace - Replaces each occurrence
of a string
- Replace (bigstring, searchstring,
replacementstring)
- FormatCurrency - Returns a
string using a currency format
- FormatDateTime - Returns a
date or time expression
- FormatDateTime("3/2/99",vbShortTime)
- FormatNumber - Returns a number
formatted according to a variety of options
- FormatPerCent - Returns a number
formated as a percent
Arrays
Every programmer eventually uses arrays. Mostly they're pretty
easy to understand. Take note, however, that you can resize an array with
REDIM without losing the data. For details, see the PRESERVE keyword in
the HELP entry on REDIM. If you use the LBound/UBound in your code instead
of hard-coding the dimension of the array, you can later change the size
of the array without touching your code!
- Option Base - Determines whether
the lowest range of an array is 0 or 1
- Erase - Erases all values of
an array
- Dim - Creates an array
- Redim - Resets the bounds of
an array (has option to save values)
- UBound - Returns the upper
dimension of an array
- LBound - Returns the lower
dimension of an array
- Filter - Returns a subset of
an array based on a filter
- Filter (inputarray, searchstring)
- Array - Yes, there is a function
called array. It returns an array that has been filled with data from
a list. It allows you to put the actual data values in the code to avoid
having the user input it or to avoid having to read it from a file
- ArrayName = Array (10,
20, 30)
- Join - Concatenates strings
within an array
File Handling (Generic)
While VB is working on a better approach (FileSystemObject),
the built-in file handling statements are still the only way to access
data other than through the VB database capabilities. Your skills in this
area can make or break your ability to work with various formats. The
OPEN/CLOSE statements are critical to success, but the LOF, EOF, and LEN
functions are used even more often! It's also a given that you'll use
the DIR function regularly.
- Dir - Returns a filename that
matches a pattern
- CurDir - Returns the current
directory
- MkDir - Creates a directory
- mkdir ( "newdirectoryname"
)
- ChDir - Changes the current
directory to a new location
- chdir ( "newdirectoryname"
)
- ChDrive - Changes the current
drive
- RmDir - Removes the indicated
directory
- rmdir ( "directoryname"
)
- Freefile - Returns an unused
file handle
- Open - Opens a file for access,
locking it from other applications
- open "filename" for input
as #1
- Close - Closes a file so that
other applications may access it
- LOF - Returns the length of
a file in bytes
- EOF - Returns a boolean value
to indicate if the end of a file has been reached
- statusvariable = eof (
#1 )
- Name As - Renames a file
- name "filename1" as "filename2"
- Kill - Deletes a file
- Fileattr - Returns attribute
information about a file
- GetAttr - Returns attributes
of a file or directory
- i = GetAttr("c:\windows\temp")
- SetAttr - Sets the attributes
of a file
- SetAttr pathname, vbHidden
- Reset - Closes all disk files
opened by the OPEN statement
- FileDateTime - Returns data
file was created or last edited
- FileDateTime ( filename
)
- FileLen - Returns length of
file in bytes
- FileCopy - Copies a file to
a new name
- FileCopy sourcefile, destinationfile
- Lock - Controls access to a
part or all of a file opened by OPEN
- UnLock - Restores access to
a part or all of a file opended by OPEN
- Width # - Set the output line
width used by the OPEN statement
File Handling - ASCII-specific
While VB is working on a better approach (FileSystemObject),
the built-in file handling statements are still the only way to access
data outside of a data base. Your skills in this area can make or break
your ability to work with various formats. The OPEN/CLOSE statements are
critical to success, but the LOF, EOF, and LEN functions are necessary
to build useful code.
- Line Input - Reads an entire
line of ASCII text
- line input #1, tempvariable$
- Write - Puts data in a file,
with separators for the data
- Print - Puts data in a file
with no separators
- Spc - Used in a print statement
to move a number of spaces
- Print #2, var1; spc(15);
var2
- Tab - Used in a print statement
to move to TAB locations
- Print #2, var1; Tab(20);
var2
File Handling - Binary-specific
VB
also support features which allow you to access a file on a byte-by-byte
basis. The good thing about it is that you have more control, the bad
thing is that you may have to write more code. Generally, a programmer
will use the option (ASCII or Binary access) according to the least
code he has to write. For binary access the Get/Put are equivalent to
the Line Input and Print functions used in ASCII text file access. The
big difference between the two is that binary access will read (Get) an
exact number of bytes of data, and the reading can start at any byte within
the file.
- Get - Reads data from a file
- Put - Puts data into a file
- Seek - Moves the current pointer
to a defined location in a file
- Input
- Loc - Returns current position
with an open file
Declarations
I
probably get more questions about the functions in this section than about
any other group. In general, the concepts are pretty simple, but the details
of getting it exactly right can cause even experienced programmers trouble.
Focus on understanding Dim/ReDim/Public/Private/Sub/Function/Type and
Set. However, they're all useful at times, so bear down and commit these
to memory. I'll try to add more text and tips on these than I have on
the others.
- Dim - Used to define a variable
as a certain type
- i = dim i as integer, r
as single
- You can use the Option
Explicit to make sure that VB forces you to declare every variable
you use. DIM is that simplest way to declare a variable
- ReDim - Used to change the
dimensions of a dynamic array
- redim arrayname(37)
- Don't be afraid of this
one. You can use ReDim to create an array whose size grows by 1
every time you want to add a number to it. Then, the UBound tells
you how many numbers you've added.
- Static - Establishes a procedure
variable which keeps its value between calls
- static i as integer
- For example, if you want
to keep track of how many times you've been in a procedure, set
a counter as STATIC and increment it by one for each visit to the
procedure. It will never go away until the program is terminated.
- Public - Creates a variable
which can be accessed outside its own procedure
- public i as integer
- Even if you're the only
programmer writing code in your application, use of Private vs Public
will help catch errors if you inadvertently try to access an out-of-scope
variable
- Private - Creates a variable
that can be read only in its own procedure or module, according to where
the declaration took place.
- private i as integer
- Use this as often as possible
to avoid unnecessary exposure of your variables to coding mistakes.
- Sub - Defines a procedure which
can execute a block of code
- Sub NewProcedure (var1
as integer, var2 as string)
- Be sure to check out HELP
for how to handle Sub arguments. There are more questions and mistakes
made concerning the use of arguments than just about anything else
I've seen.
- Function - Declares a procedure
which can return a value
- Function NewFunction (var1
as integer, var2 as string) as SINGLE
- This is actually the most
versatile of the Sub/Function procedure types. It can do anything
a Sub can do as well as returning a value for use in an expression.
- Call - Transfers control to
a Sub or Function (is optional)
- Call Procedure 1
- Since the use of CALL is
optional, forget you ever saw it
- CallByName - Executes a method
of an object or set/returns a property
- CallByName(form1,procedurename,vbMethod)
- The really cool thing about
this is that you don't have to hardcode a procedure call. Just use
a string variable with the name of the procedure to call.
- Option Explicit - Instructs
VB to force an explicit declaration of all variables
- Option Explicit
- You're borderline stupid
if you don't use it to catch typing errors. Set up the VB IDE to
automatically include this in all projects.
- Option Compare - Instructs
VB on how to make string comparisons
- Option Compare Binary
- This can add case-insensitivity
for those times when you don't want to hard-code it
- Option Private - Prevents a
module's content from being referenced outside a project.
- Option Private Module
- Generally doesn't apply
to most VB applications. If you find a good use for it let me know.
- Property Get - Declares how
to get the value of a property
- Property Get Name()
- You won't use this much
until you get into creating classes of your own
- Property Let - Declares how
to assign a value to a property
- Property Let Name()
- You won't use this much
until you get into creating classes of your own
- Property Set - Declares how
to set a variable reference to an object
-
- You won't use this much
until you get into creating classes of your own
- Set - Assigns an object reference
to a variable
- Set X = form1.txtInputFromUser
- Very useful for making
code more readable or simply to cut down on how much typing you
have to do!
- Let - Precedes assignment of
a value to a variable
- Let i = 3
- It's optional, no one uses,
so forget you ever saw it
- Type...End Type - Creates a
user defined part type which consists of standard VB data types
- type anytypename
- one as string
- two as integer
- three as boolean
- End Type
- This is a really excellent
way to keep several kinds of data under one variable name. Plus,
you can PUT or GET a user-defined type with a single line of code.
- Const - Creates a variable
whose value is fixed
- const anyname
- Basically, use this to
give easy to remember names to values. For example, suppose you
use the value 37.2 a lot in your code, then if you put CONST MyAge
= 37.2 in your code you'll be able to insert the MyAge where the
37.2 should have gone. Easier to type and easier to read. Also,
you can chane the value of the constant by changing only the declaration
line of code, rather than searching out every place the value was
used!
- Declare - Used to define a
procedure that exists in another file
- declare functionname (arg1
as integer, arg2 as string) as integer
-
- ArrayName = Array (10,
20, 30)
- Implements - Specifies
a class to be implemented in a module
- Friend - Allows procedure
to be callable from modules outside the class
- GetObject - Return a reference
to an ActiveX component
- CreateObject - Creates
and returns a reference to an ActiveX object
- GetAutoServerSettings -
Returns information about the state of an ActiveX component's registration.
- Enum - Declares a type
for an enumeration
- Event - Declares a user-defined
event
- TypeName - Returns the
type of data in a variable
- VarType - Returns the type
of data in a variable
- DefType - Sets the default
data type of variables
- IS - A variety of data
type or status checking options
- IsArray, IsBindable,
IsBroken, IsDate, IsDirty, IsEmpty, IsError, IsMissing, IsNull,
IsNumber, IsObject, IsReady, IsRootFolder
Date/Time
These functions are pretty self-explanatory
so I've not added any extra comments to them.
- Date - Gets the current date
- Time - Gets the current time
- Now - Gets the current date
and time
- Timer - Returns the number
of seconds since midnight
- DateAdd - Adds a time interval
to a date
- DateDiff - Returns how many
time intervals there are between two dates
- DateSerial - Returns the month/day/year
- DateValue - Returns the date
- Year - Returns the current
year
- Month - Returns the current
month (integer)
- MonthName - Returns the text
of the name of a month
- Day - Returns the current day
- Hour - Returns the current
hour
- Minute - Returns the current
minute
- Second - Returns the current
second
- TimeSerial - Returns a date
with the hour/minute/second
- TimeValue - Returns the time
- WeekDay - Returns the current
day of the week (integer)
- WeekDayName - Returns the text
of a day of the week
Miscellaneous
In
this list you'll find some of the features of VB about which I get a lot
of email questions! The MsgBox is easily the most used of the bunch.
It handles all of the "Y/N" queries to your user so get to know it well.
Also, the DoEvents, Shell, and Command functions are indispensable
in certain occasions so make sure you know when they should be used.
- MsgBox - A built-in dialog
box that gives a message and allows a user input
- i = msgbox "Read this!",
vbokonly, "Test Message"
- DoEvents - Allows VB to complete
pending tasks
- Shell - Executes a 2nd program
from within the current program
- shell "notepad.exe"
- Note - VB does not wait
for the Shell'd program to quit before executing the next line of
code!
- Command - Gives any text that
followed a VB .EXE execution command
- Environ - Returns the system
environmental space content
- Beep - Makes the computer beep
once.
- InputBox - A built-in dialog
box that allows entry of a text string
- inputbox "Input a value!",
5
- AddressOf - Provides an entry
point for an external program to use a procedure
- AddressOf ( procedurename
)
- AppActivate - Activates an
applications window
- AppActivate ( windowtitle
)
- RaiseEvent - Fires an event
declared at module level
- Load - Load an object
- Unload - Unload an object
- LoadPicture - Load a picture
into a control property
- form1.picture = loadpicture
(filename)
- SavePicture - Save a picture
to a file
- SavePicture(form1.picture,filename)
- LoadResData - Load the data
from a resource file
- LoadResData(index,format)
- LoadResString - Load a string
from a resource file
- LoadResString(index,format)
- SendKeys - Send keys to another
app as though they were from the keyboard
- QBColor - Returns a value corresponding
to the original QB values 0-15
- form1.backcolor = QBcolor
(12)
- RGB - Returns a color value
by inputting the red, green, and blue parts
- form1.backcolor = RGB (12,128,256)
- Me - Refers to the current
object, usually the active form
Registry
I've
never quite understood why Microsoft got away from the use of an INI file.
The ability to use a simple text editor to resolve problems with a program's
settings was a key feature about INI files. Also, no matter how Windows
crashed, the INI file was protected.
Whining aside, VB has made it incredibly easy to access values
in the registry. The following VB functions are simple to use and there's
hardly any excuse for not taking advantage of them. One thing to remember
is that the registry save strings so if you're saving or reading
numeric information then may have to do some string manipulation with
the results.
- GetSetting - Get a value from
the Registry
- temp$ = getsetting "TestApp",
"SectionName", "KeyName", "defaultvalue"
- GetAllSettings -Returns a list
of key settings and their values
- GetAllSettings(appname,section)
- SaveSetting - Save a value
into the Registry
- savesetting "TestApp",
SectionName, KeyData
- DeleteSetting - Deletes an
entry from the registry
- deletesetting "TestApp",
"SectionName", "Keyname"
Loops and Conditional Decisions
While
the event-driven model of VB has taken out a lot of the need for controlling
the flow of your application, don't think for a second that you can get
by without being an expert on these features of VB. Virtually every single
procedure you'll ever write will have one or more of these in it. The
concepts are simple, so take the time to become a master of each one!
The For...Next and the Select Case statements are the two most
used, so concentrate on them first.
- If..Then..Else - Performs code
based on the results of a test
- If A>5 Then Print "A
is a bit number!"
- For...Next - Loops a specified
number of times
- For i = 1 to 5: print #1,
i: next i
- For Each ... Next - Walks through
a collection
- For Each X in Form1.controls:
Next X
- While...Wend - Loops until
an event is false
- while i < 5: i = i +1:
wend
- Select Case - Takes an action
based on a value of a parameter
- select case i
- case 1 : print "it was
a 1"
- case 2 : print "it was
a 2"
- end select
- Do...Loop - Loops until conditions
are met
- do while i < 5 : i =
i + 1 : loop
- IIF - Returns 1 of two parts,
depending on the value of an expression
- result = IIF (testexpression,
truepart, falsepart)
- Choose - Selects and returns
a value from a list of arguments
- Choose (index, "answer1",
"answer2", "answer3")
- With - Executes a series of
statements on a single object
- With textbox1
- .Height = 100
- .Width = 500
- End With
- End - Immediately stops execution
of a program
- Stop - Pauses execution of
a program (can restart without loss of data)
- Switch - Returns a value associated
with the first true expression in a list
- result = Switch (testvalue1,
answer1, testvalue2, answer2)
- GoTo - Switches execution to
a new line in the code
- GoSub ... Return - Switches
execution to a new block of code and then returns
- On .. GoSub - Branch to a specific
line of code then return at the next Return statement
- On Number GoSub Line1,
Line2, Line3
- On .. GoTo - Branch to a specific
line of code
- On Number GoTo Line1, Line2,
Line3
Special Values
There
are some keywords in VB which take on special meaning. Their use can be
confusing at times, but you'll get used to the terminology as your programming
experience grows.
- True - A logical (Boolean)
expression. In VB, its value is -1
- False - A logical (Boolean
expression. In VB, its value is 0
- Nothing - Disassociates an
object variable from an actual object
- Null - Indicates that a variable
has no valid data
- Empty - Indicates that a variable
has not yet been initialized
Error Handling
Try
as I might, I cannot create error free code! So, I turn to these VB features
to help me figure out what went wrong.
- On Error - Enables an error-handling
routine
- On Error GoTo Line2 (if
error occurs, go to line2)
- On Error Resume Next (if
error occurs, continue executing next line of code)
- On Error Goto 0 (disables
error handling)
- Resume - Used to resume execution
after a error-handling routine is finished
- Resume
- Resume Next
- Resume Line1
- CVErr - Returns an error type
variable containing a user-specific error number
- Error - Simulates the occurrence
of an error
Financial Calculations
For
those folks who want to use VB for performing routine investment calculations,
VB provides a variety of functions. Personally, I use them very infrequently,
but I suspect they are used regularly by a lot of programmers. I've never
gotten a single question in the mail about these functions!
- DDB - Returns the depreciation
of an asset for a specific time period
- FV - Returns the future value
of an annuity
- IPmt - Returns the interest
payment of an investment
- IRR - Returns the internal
rate of return on a cash flow
- MIRR - Returns a modified internal
rate of return on a cash flow
- NPer - Returns a number of
periods for an annuity
- NPV - Returns a present value
of an investment
- PPmt - Returns the principal
payment of an annuity
- PV - Returns the present value
of an annuity
- Rate - Returns the interest
rate per period for an annuity
- SLN - Returns the straight-line
depreciation of an asset
SYD - Returns the sum-of-years' digits
depreciation of an asset |
|