The VBScript Language
When compared to standard VB, VBScript could almost be called "VB-Stripped" because it lacks so many functions. However, this is by design; the power of VBScript is in where it can be used and the objects it can access rather than in the language itself. Therefore, using VBScript will take some adjusting if you are used to Visual Basic.
Working with Variants Only
Perhaps the most striking difference between VB and VBScript is that all variables in VBScript are variants. The following statements are valid VBScript declarations:
Dim sLastName Dim nCounter Dim myArray(2,5)
VBScript does not allow a standard VB declaration with the As keyword. If you attempt to include one, you receive an error. The variant-only rule also applies to all variables used in subs and functions:
Function CalcInterest(P,R,T) CalcInterest = P * R * T End Function
In the CalcInterest sample function, all the parameters and the return value are variants. The calling code could legally assign the string "Hello" to one of the parameters, although a type mismatch error would occur in the multiplication statement. For this reason, I strongly suggest adhering to the variable naming conventions you use in regular Visual Basic. You can also use the Option Explicit statement in the header of your Web page to require variable declarations.
Several functions in VBScript also can be used to determine the type of variable being stored in a variant. They are summarized in Table 30.3.
Table 30.3
Determining a Variable Type in VBScript
Function(s) |
Purpose |
VarType(varname) |
Returns a constant |
TypeName(varname) |
Returns a description |
Is()… functions |
Checks for specific types and conditions |
The following VBScript code displays the description of the type of each element in a variant array:
Dim varArray(5) Dim i varArray(1) = "This is a string" varArray(2) = 123.456 varArray(3) = #12/25/1999# varArray(4) = 10 varArray(5) = Null For i = 1 to 5 Msgbox "Array element " & i & " is of type " & TypeName(varArray(i)) Next
Notice also that the array example makes use of a For loop. In VBScript, a variable name cannot be placed after a Next statement in a For loop. Doing so causes an error.
Using Objects for Added Power
Although the VBScript language has definite limitations, keep in mind that you can use VBScript to communicate with external objects. These objects can be ActiveX DLLs that you write in regular Visual Basic or other automation objects installed on your system, such as Microsoft Excel or Word.
First, you create an instance of the object by using the CreateObject method:
Set objWord = CreateObject("Word.Application")
Next, you call methods and reference properties in the object:
objWord.Visible = True objWord.Activate objWord.Documents.Add objWord.WordBasic.Insert "Here is some text"
Finally, when you are finished with the object, destroy the reference to it:
Set objWord = Nothing
NOTE
In Chapter 31, "Active Server Pages," you discover Server.CreateObject(), which is used to create objects in an Active Server Page.
Learn more about creating your own custom objects in Chapter 16, "Classes: Reusable Components." After you create these objects, you can use them with the CreateObject function.
See "Creating an ActiveX DLL," p. 368.
When using your own objects with VBScript, you have to handle certain return values carefully because VBScript uses only variants. Most return values such as Integer or String work as you would expect with VBScript, but arrays require special attention. Examples of returning arrays and recordsets are described in Chapter 27.
Accessing the File System
To prevent harmful scripts from damaging the host computer, VBScript offers some special functions that replace the normal VB functions or perform the same activity in a different way. One major area of difference is in the handling of file access. The standard Visual Basic File input and output commands, as discussed in Chapter 21, "Working with Files," are not available in VBScript. Instead, all file access is provided through the methods and properties of special objects. The objects used in dealing with files are listed in Table 30.4.
Table 30.4
VBScript Objects Used for Working with Files
Object |
Description |
File |
A file on the local machine |
Folder |
A folder (directory) on the local machine |
Drive |
A drive on the local machine |
TextStream |
An object that provides sequential read/write capability |
FileSystemObject |
An object that represents the entire file system; used to reference all the above objects |
To perform file and disk operation, use a method or property of an object listed in Table 30.4. The most important object is the FileSystemObject object. You use VBScript's CreateObject function to create a reference to it, as in the following line of code:
Set objFs = CreateObject("Scripting.FileSystemObject")
Obviously, this object gives a malicious programmer a way to damage your system. For this reason, Internet Explorer displays a warning message when VBScript accesses external objects, as shown in Figure 30.6.
Internet Explorer has several security settings to prevent harmful scripts or controls from running on your computer.
The code in Listing 30.1 displays the last time a user visited a particular Web page. It keeps track of this information by creating a text file called LASTVISIT.TXT in the WINDOWS directory. Open the file in Internet Explorer and click the Refresh button several times to test it.
Listing 30.1 :Accessing the File System in Internet Explorer 4.0
<HTML> <HEAD> <SCRIPT Language = "VBScript"> <!--OPTION EXPLICIT Dim objfs 'FileSystemObject Object Dim objfile 'File Object Dim objTs 'TextStream Object Dim sInfoFile 'Path to the info file Dim sInfo 'Variable used to store information 'Create a reference to the local file system Set objFs = CreateObject("Scripting.FileSystemObject") 'Determine path to file in the windows directory sInfoFile = objFS.GetSpecialFolder(0) & "\LASTVISIT.TXT" 'If file exists then read a line of text If objfs.FileExists(sInfoFile) Then Set objfile = objfs.GetFile(sInfoFile) Set objts = objfile.OpenAsTextStream(1) 'Reading = 1, Writing = 2 sInfo = objts.ReadLine() objts.close Else sInfo = "You haven't visited this web site before!" End If 'Write message to the browser window Document.Write sInfo & "<BR>" 'Store new message in the file for next time sInfo = "Your last visit was <B>" & Now & "</B>. Welcome back!" Set objts = objfile.OpenAsTextStream(2) 'Reading = 1, Writing = 2 objts.WriteLine(sInfo) objts.close Set objfs = Nothing --> </SCRIPT> </HEAD> </HTML>