Appendix C

Answers to Quiz Questions


CONTENTS


Day 1

  1. The World Wide Web has become one of the most popular services on the Internet, since it allows users to view Web pages. Another very popular Internet service is FTP, since that service allows Internet users to send and receive files on the Internet. The ability of Web pages to allow you to use FTP is a marriage of two of the most popular Internet services today.
  2. Web pages are built using the Hypertext Markup Language, or HTML. Other languages such as VBScript can be used to make Web pages more powerful in ways that HTML cannot.
  3. VBScript is not a part of HTML, but HTML can include a tag that will tell the browser to allow VBScript code to execute. When VBScript code is placed within HTML code, a special "tag" is used that tells HTML to allow another language to be run. The Web browser is responsible for figuring out what that other language is and passing control to it. Thus, when a VBScript is embedded in an HTML document, the Web browser passes control to the VBScript interpreter.

Day 2

  1. The most significant capability a scripting language affords a Web page is the ability of the user to interact with the Web page. This means that the user can manipulate the various controls, objects, and components on the Web page, and the code that executes when those controls are manipulated accomplishes the user's goals.
  2. VBScript can work with and help integrate together intrinsic HTML controls such as text box controls and buttons; Java applets; ActiveX controls such as rotating labels, charts, timers; calendars, status bars, and other specialized controls; and embedded OLE objects, such as spreadsheets, graphics programs, and word processors.
  3. The VBScript code that comes along in a Web page cannot directly access any files on the client's computer. This prevents a Web page from making any modifications to sensitive files on the user's computer. VBScript is also very safe in that it doesn't give programmers the ability to create unrecoverable crashes by virtue of its language syntax.
  4. VBScript was derived from Microsoft Visual Basic. A limited set of commands and functions were taken from Visual Basic. This makes it easy for those who already know Visual Basic to use VBScript-plus it leverages all the benefits of Visual Basic to the Internet.
  5. All you need is a browser that supports Visual Basic Script, which typically includes the Visual Basic Script run-time interpreter. Then, you are ready to use any page containing Visual Basic Script. If you are going to develop Visual Basic Script programs as well, you need a simple text editor to edit HTML documents. Armed with these tools, you can write and use Web pages that contain Visual Basic Script code.

Day 3

  1. To state it in quite simplified terms, all you need in each case is for the tool to have access to the VBScript runtime interpreter, along with the ability of the software tool to recognize when it needs to pass control to the runtime interpreter.
  2. In addition to Internet Explorer, technologies such as Next Software, Inc's WebObjects, Microsoft's Internet Information Server, and Active VRML will take advantage of VBScript. Many browsers do or will support VBScript, as well as many controls designed for creating browsers or implementing that technology. Because the Internet is changing so quickly, the list is growing rapidly. In our opinion, most browsers will eventually support VBScript, but at the time of this writing, the majority of Web users were not yet on VBScript-aware browsers. Refer to the references in Appendix B, "Information Resurces," to obtain up-to-date information.
  3. This code listing illustrates the "barebones" structure of an HTML document that uses VBScript. Note that all the HTML sections have starting and ending tags associated with them:
<HTML>
<HEAD>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="VBScript">
<!--
… VBScript code goes here
-->
</SCRIPT>
</BODY>
</HTML>

Day 4

  1. The data type of VBScript variables is called the variant. Using the variant, you can store data of all the fundamental data subtypes listed in this lesson. The data subtypes you can store include the integer, long, byte, Boolean, single, double, date, and string data types.
  2. Here's the answer:
    Dim Name
    Name = "Tim Koets"
  3. Here's the answer:
If IsNumeric(Age) = False Then
    MsgBox "The size must be a number. Please enter it again."
End If

Day 5

  1. The answer is shown in the following code segment. The Web page, named 05quiz01.htm, is contained on the CD-ROM that accompanies this book:
    <HTML>

    <TITLE>Chapter 5 Quiz #1</TITLE>

    <H1><A HREF="http://www.mcp.com"><IMG  ALIGN=BOTTOM SRC="../shared/jpg/_
                 samsnet.jpg" BORDER=2></A>
    Converting Inches to Feet</H1>

    <BODY>

    <HR>

    <CENTER>Feet    <INPUT NAME="txtFeet">
    <INPUT TYPE=BUTTON VALUE=" Convert " NAME="cmdConvert"></CENTER>

    <HR>

    <center>
    from <em>Teach Yourself Visual Basic Script in 21 Days</em> by
    <A HREF="../shared/keith.htm">Keith Brophy</A> and
    <A HREF="../shared/tim.htm">Tim Koets</A><br>
    Return to <a href="..\default.htm">Content Overview</A><br>
    Copyright 1996 by SamsNet<br>
    </center>

    <SCRIPT LANGUAGE="VBScript">
    <!--  Option Explicit

       Sub cmdConvert_OnClick()
          Dim Inches, Feet
          Feet = txtFeet.Value
          Inches = Feet * 12
          MsgBox "There are " & Inches & " inches in " & Feet & " feet."
       End Sub

    -->
    </SCRIPT>

    </BODY>

    </HTML>

  2. The answer is shown in the following code segment. The Web page, named 05quiz02.htm, is contained on the CD-ROM that accompanies this book:
    <HTML>

    <TITLE>Chapter 5 Quiz #2</TITLE>

    <H1><A HREF="http://www.mcp.com"><IMG  ALIGN=BOTTOM SRC="../shared/jpg/_
                 samsnet.jpg" BORDER=2></A>
    The Ticket Stand</H1>

    <BODY>

    <HR>

    <PRE>Name                         <INPUT NAME="txtName"></PRE>
    <PRE>Number of Tickets            <INPUT NAME="txtTickets"></PRE>
    <PRE>Row Number (1 for front row) <INPUT NAME="txtRow"></PRE>

    <CENTER><INPUT TYPE=BUTTON VALUE=" Get Cost " NAME="cmdCost"></CENTER>

    <HR>

    <center>
    from <em>Teach Yourself Visual Basic Script in 21 Days</em> by
    <A HREF="../shared/keith.htm">Keith Brophy</A> and
    <A HREF="../shared/tim.htm">Tim Koets</A><br>
    Return to <a href="..\default.htm">Content Overview</A><br>
    Copyright 1996 by SamsNet<br>
    </center>

    <SCRIPT LANGUAGE="VBScript">
    <!--  Option Explicit

       Sub cmdCost_OnClick()

          Dim Cost
          Dim Ticket_Count

          Ticket_Count = txtTickets.Value

          Cost = 20.00                   ' Base price

          If txtRow.Value = 1 Then
              Cost = Cost + 4.00         ' Add $4 for front row
          End If

          Cost = Cost * Ticket_Count     ' Get cost for all tickets
          Cost = Cost + Cost * 0.03      ' Add 3% commission
          Cost = Cost + Cost * 0.08      ' Add 8% sales tax

          MsgBox "Your total cost is " & Cost

       End Sub

    -->
    </SCRIPT>

    </BODY>

    </HTML>

  3. a. 36
    b. 2
    c. -1
    d. True
    e. False

Day 6

  1. If…Then-This control structure is used to make decisions. If the condition is satisfied, the code that follows the If…Then statement is executed. A simple example of its use is
    If Result = True Then
        MsgBox "The result is true."
    End If

    For…Next-This control structure is used to repeat a block of code nestled between the For and Next statements based on some condition.
    A simple example of its use is
    For x = 1 to 100
        age(x) = 0
    Next
    Do…Loop While-This control structure is used to repeat a block of code while the condition is true.
    An example of its use is
    Do
        age(x) = 0
        x = x + 1
    Loop While x < 100
  2. Here's the code:
    YearBorn = InputBox("What year were you born in? ")
    If YearBorn < 1890 Or YearBorn > 1990 Then
    MsgBox "The year you have entered is invalid."
    End If
  3. Here's the code:
Proceed = False
Do
   YearBorn = InputBox("What year were you born in? ")
   If YearBorn < 1890 Or YearBorn > 1990 Then
      MsgBox "The year you have entered is invalid."
   Else
      Proceed = True
   End If
Loop Until Proceed = True

Day 7

  1. A function, which is called differently from a subroutine, returns a value to the code that calls it. Functions must be set equal to a return value:

    Answer = MyFunction(A, B, C)

    A subroutine, on the other hand, isn't set to a variable. It can be called like
    MySubroutine A, B, C
    or
    Call MySubroutine(A, B, C)
  2. It is impossible for a procedure to change the value of a variable passed to it unless it gets its own copy. Because the variable A was passed to the function by value, the function GetHypotenuse has its own copy, which is modified within the function. The original variable, however, has exactly the same value it had before the function was called.
  3. The correct code listing is shown below. The code was in error because the function CalculateCost modified the two variables passed to it. Those variables were passed by reference, not by value, which is illegal.
Sub cmdTest_OnClick()
   
    Dim Base_Cost
    Dim Total_Cost
    Dim Tax
    Tax = 5     ' Michigan sales tax (5%)
    Total_Cost = CalculateCost(Base_Cost, Tax)
    txtResult.Value = "The total cost is $" & Total_Cost
End Sub
Function CalculateCost(ByVal Cost, ByVal Tax)
   Tax = Tax / 100
   Cost = Cost + Tax * Cost
   CalculateCost = Cost
End Function
The solution to the problem is to pass the two parameters in by value so that the function has its own copy of the variables. That way, it can modify the variables as it needs to. The new code listing shows the necessary changes.

Day 8

  1. The textarea control is different in many ways. First, it gives you a two-dimensional area in which to place text. Unlike the text control that only has a one-dimensional SIZE attribute, the textarea control lets you adjust its dimensions with the ROWS and COLS attributes. Finally, the textarea control has a starting and ending tag, whereas the text control has a conventional input tag.
  2. The following simple Web page, which is named Quiz8-02.htm on the CD-ROM, contains a textarea control and a button. The user enters the products into the textarea control and clicks the button as shown:
<HTML>

<HEAD>
<TITLE>Chapter 8 Quiz #1</TITLE>
</HEAD>

<BODY>
<H1>
<A HREF="http://www.mcp.com"><IMG  ALIGN=MIDDLE
SRC="..
/shared/jpg/samsnet.jpg" BORDER=2
HSPACE=20></A>
<EM>Chapter 8 Quiz Answer</EM></h1>
<HR>

<H2>Product Information</H2>

<FORM NAME="MyForm">

<P>Please enter all of the products you would like information about
in the space below. Then, click on the button and you will be
presented with a series of Web pages detailing your selections.
<HR>
<PRE><TEXTAREA NAME="txaProducts" COLS="60" ROWS="10"></TEXTAREA></PRE>
<P><INPUT TYPE="BUTTON" NAME="cmdGetInfo"
VALUE=
"Get Product Information">

</FORM>

<HR>

<center>
From <em>Teach Yourself VBScript in 21 Days</em><br>
by <A HREF="../shared/info/keith.htm">Keith Brophy</A> and
<A HREF="../shared/info/tim.htm">Tim Koets</A><br>
<br>
Return to <A href=Back08.htm>content overview</A><br>
Copyright 1996 by SamsNet<br>
</center>

<SCRIPT LANGUAGE="VBScript">
<!--  Option Explicit
   Sub cmdGetInfo_OnClick()
      MsgBox "The products you're requesting information onÂ
              will be sent to you momentarily."
   End Sub

-->
</SCRIPT>

</BODY>
</HTML>
All you need to do next is pass the products to the server and get the information back to the user. You'll learn more about how to do that on Day 19.

Day 9

  1. The primary difference is that with a radio button, the user can only select one of several choices. With a check box, the user can select as many of the choices as he wants. Both are useful depending on the circumstances. One important impact this has on your VBScript code is that you can reference the checked property of a check box. A radio button, on the other hand, must be handled through code associated with the OnClick event to know which button the user selected.
  2. The text control: You use this control to accept strings from the user in a simple box on the screen.
    The button control: The button control provides a 3-D button the user can click to perform some operation usually designated on the caption of the button.
    The textarea control: This is similar to a text control, but the area the user can enter text into is bigger than one line.
    The radio button control: You commonly use radio buttons to present a series of choices to the user where the user can select only one choice.
    The check box control: Check boxes enable the user to select one or more choices from a list.
    The password control: Use the password control in place of the text control when you want the text entered in the box to be masked so that the user can't see it.
    The reset control: Use the reset control when you want to provide a way for the user to reset a Web page to when loaded. This is especially handy if the user is unable to reload a page from the browser or other software he is using.
    The submit control: This control is a button that, when clicked, sends the contents of an HTML form to a Web server. Use this when you are using CGI to communicate with a server.
    The combo control: The combo control is used to present the user with a list of items, of which the user may decide to select one or more items. Use this when you are unsure of the type and number of items you will have, since the combo control lets you select them dynamically.
    The select control: The select control provides the user with a list of items much like a menu. Use it to produce a dynamic list of items, only allowing the user to select one item.
    The hidden control: The hidden control is like a text control, except that it's invisible. Use it to store data on a Web page instead of in a variable. This could be useful when you wish to transfer data from one scripting language to another or for an easy way to store data being transmitted across a Web server.
  3. The answer to this quiz question is provided on the CD-ROM that accompanies this book. Figure C.1 shows the file, which is named convert.htm.

    Figure C.1 : A Web page that converts feet, inches, or yards to meters.

    The following segment shows the source code for the Web page:

<HTML>

<HEAD>
<TITLE>Chapter 9 Quiz</TITLE>
</HEAD>

<BODY>
<H1>
<A HREF="http://www.mcp.com"><IMG  ALIGN=MIDDLE
SRC="../shared/jpg/samsnet.jpg" BORDER=2 HSPACE=20></A>
<EM>Converting Feet, Inches or Yards to Meters</EM></H1>
<HR>

<INPUT TYPE="TEXT" NAME="txtNumber" SIZE="10">

<INPUT TYPE="RADIO" NAME="optUnits" chECKED
  OnClick="SetUnits('Feet')"> Feet
<INPUT TYPE="RADIO" NAME="optUnits"
  OnClick="SetUnits('Inches')"> Inches
<INPUT TYPE="RADIO" NAME="optUnits"
  OnClick="SetUnits('Yards')"> Yards
<P>
<INPUT TYPE="BUTTON" NAME="cmdResults" VALUE="Calculate">
<INPUT NAME="txtResult" SIZE="50">

<HR>
<center>
From <em>Teach Yourself VBScript in 21 Days</em><br>
by <A HREF="../shared/info/keith.htm">Keith Brophy</A> and
<A HREF="../shared/info/tim.htm">Tim Koets</A><br>
<br>
Return to <A href=Back09.htm>content overview</A><br>
Copyright 1996 by SamsNet<br>
</center>

<SCRIPT LANGUAGE="VBScript">
<!--
   Dim Units

   Units = "Feet"

   Sub SetUnits(NewUnits)
      Units = NewUnits
   End Sub

   Sub cmdResults_OnClick()
      Dim Number
      Dim Result
      Number = txtNumber.Value
      If Units = "Feet" Then
          Result = Number * 0.3048
      ElseIf Units = "Inches" Then
          Result = Number * 0.00254
      ElseIf Units = "Yards" Then
          Result = Number * 0.9144
      End If

      txtResult.Value = "There are " & Result & " meters in " &_
                         Number & " " & Units & "."
 
   End Sub

-->
</SCRIPT>

</BODY>
</HTML>

The solution uses a script-level variable called Units that tracks the user-selected units. Whenever the user clicks a radio button, the subroutine SetUnits proceeds to change the script-level Units variable. Then, when the user clicks Convert, the script uses the appropriate multiplier in a conditional expression to obtain the result. This example shows how to effectively use intrinsic HTML controls, procedures, conditional structures, and script-level variables to accomplish the task.

Day 10

  1. The following is the code:
    <SCRIPT LANGUAGE="VBSCRIPT">
    <!--
    sub lblTester_Click
       lblTester.Caption = "Kenny Jasper"
    end sub
    -->
    </SCRIPT>

  2. The following is the code:
If (lblTester.Angle >= 20)and (lblTester.Angle <= 40) then
    lblTester.Caption = "Brooke"
else
    lblTester.Angle = lblTester.Angle + 10
end if

Day 11

  1. The following is the code:
    Sub MyTimer_Time
       ' Check to see what the current interval is
       if MyTimer.Interval = 2000 then
           MyTimer.Interval = 1000
       elseif MyTimer.Interval = 1000 then
           MyTimer.Interval = 500
       else
           MyTimer.Enabled = 0
       end if
    end sub

  2. The following is the code:
MyItem.date = "7/6/62"

By setting the suppression date back in time, you ensure that the code will consider that the suppression date has already been reached, and the graphic will not display.

Day 12

  1. The following code segment shows the answer. Notice that because the Java applet resides at a different location from the current page, you must provide CODEBASE. CODETYPE and the associated apology message are optional.
    <OBJECT
           ID="jvaGifts"
           CLASSID="java:Birthday.Logs"
           CODETYPE="application/java-vm"
           CODEBASE="http://www.mcp.com/javastuff/"
           HEIGHT=100
           WIDTH=100
        >
    <PARAM NAME="MaxSpend" VALUE="200">
    A java applet is used on this page but your browser does not support that.
    </OBJECT>

  2. jvaGifts.MaxSpend = "300"

Day 13

  1. Indentation is used to show the hierarchy of the code under the conditional checks. Good variable names indicate the type and the purpose of each variable. The combination of these changes results in a much more readable program:
    vAge=txtage.value
    If IsNumeric(vAge) then
        if vAge < intGENERATION_X_AGE Then
          msgbox "Dude, prepare to surf!"
        Else
           msgbox "Welcome - Prepare to enter our Web page"
        End If
    Elseif vAge = "unknown" Then
        msgbox "you must supply an age to proceed"
    Else
        msgbox "please supply a valid age"
    End If

  2. The following code segment shows the two event scripts merged into one consolidated script:
<script Language="VBScript">
sub lblFeedback_click
    msgbox "Feedback label has been clicked"
end sub
Sub cmdCalculate_OnClick
    msgbox "Button has been clicked"
End sub
</script>

Day 14

  1. The solution involves prompting the user with a Yes/No message box and, if the user responds yes, generating the <H2>Extra Hints<H2> tag with document.write. Here's the solution:
    <HTML>

    <HEAD>

    <TITLE>Brophy & Koets' Teach Yourself VBScript - Quiz 1 Solution</TITLE>


    </HEAD>
    <BODY>

    <SCRIPT LANGUAGE=VBS>
    <!-

        dim rc           ' Stores return code value
        rc = msgbox("Do you want extra hints to be displayed on this page?", _
                vbYesNo + vbQuestion,"Setting up the page")

        if rc = vbYes then
            ' Show Big Spender Page
            Spender = vbTrue
            document.write "<H2>Extra Hints</H2>"
            ' ... more document.write statements to display hints could go here
        end if
    -->
    </SCRIPT>
    <! Regular HTML statements that are always carried out could follow... -->
    <H3>Welcome to the Question Page</H3>
    <p>Q1. What eats lots of oranges and has 80,000 legs?
    <p>Q2. Why is the grass green?
    <BR>
    <BR>
    <p>A1. The field in the Boston Marathon
    <p>A2. If it was white you couldn't tell if a polar bear was in your lawn!

    </BODY>
    </HTML>

  2. Since the page is generated sequentially, the script will be carried out in the order in which it is encountered. Moving the script between the question and answer statements causes it to be carried out, and Extra Hints to be generated on the page, in that sequence. When the user responds affirmatively, he will see the Extra Hints text right after the question area on the Web page. Here's the solution:
    <HTML>

    <HEAD>

    <TITLE>Brophy & Koets' Teach Yourself VBScript - Quiz 2 Solution</TITLE>


    </HEAD>
    <BODY>

    <! Regular HTML statements that are always carried out could follow... -->
    <H3>Welcome to the Question Page</H3>
    <p>Q1. What eats lots of oranges and has 80,000 legs?
    <p>Q2. Why is the grass green?
    <BR>
    <SCRIPT LANGUAGE=VBS>
    <!-

        dim rc           ' Stores return code value
        rc = msgbox("Do you want extra hints to be displayed on this page?", _
                vbYesNo + vbQuestion,"Setting up the page")

        if rc = vbYes then
            ' Show Big Spender Page
            Spender = vbTrue
            document.write "<H2>Extra Hints</H2>"
            document.write "<p>Q1. Think about 26.2 miles"
            document.write "<p>Q1. It involves an animal"
            ' ... more document.write statements to display hints could go here
        end if
    -->
    </SCRIPT>
    <BR>
    <p>A1. The field in the Boston Marathon
    <p>A2. If it was white you couldn't tell if a polar bear was in your lawn!

    </BODY>
    </HTML>

  3. Use the vbDefaultButton2 intrinsic constant to cause the second button to be highlighted:
rc = MsgBox ("Do you want poor Fred to bike 68 miles by himself?", _
    vbYesNo + vbDefaultButton2, "Biking Question")

Day 15

  1. The following is the code:
    if StrComp(txtDepartment.Value, "Accounting", 1) = 0 then
    ' Accounting department has been entered
    else
    ' Accounting department was not entered
    end if

    Note that the non-0 third parameter to StrComp instructs the function to carry out a match that is not case sensitive.

  2. Many variations of this code would carry out the algorithm. The key is to loop through the string, using InStr to check for an occurrence of Brown and advancing the start position for InStr each time through the loop. The following is the solution:
dim blnDone  ' indicates when the string count is complete
dim intCount  ' counter of how many times Brown is detected in string
dim intFoundPosition  ' the position where Brown is found in string
dim intCurrentPosition  ' the next position to search for Brown in string

' Initialize variables to start looking at string
blnDone = False
intCurrentPosition = 1

' Continue to advance through string until done
' condition no more Brown's are found
do while not blnDone
    ' Find where the next Brown is
    intFoundPosition = InStr(intCurrentPosition,  _
      s_strBorrower, "Brown")
    ' See if Brown was found
    if intFoundPosition = 0 then
        ' No more Brown's are in string so the search is done
        blnDone = vbTrue
    else
        ' Brown was found, increment count and prepare
        ' to search again after this one
        intCount = intCount + 1
        intCurrentPosition = intFoundPosition + len("Brown")
    end if
loop
msgbox "Brown borrowed the book " & intCount & " times. "

Day 16

  1. Here's the answer:
    Dim dtmNow
    ' Get current time
    dtmNow = Now()
    if s_dtmEvent < dtmNow then
        msgbox "Registration deadline is passed."
    End if

  2. Int always truncates left on the number line. Fix truncates toward the number line. Cint rounds to the nearest even number. Here are the numeric results:
    Line 1: -6
    Line 2: -5
    Line 3: -6
  3. Here's the answer:
dim intCounter, intLeftOverPlayers
for intCounter = 1 to 1000
     intLeftOverPlayers = _TotalPlayers Mod 9
next

msgbox intLeftOverPlayers

Day 17

  1. One sequence of trace messages you can use is to insert a trace in every condition:
    If a > 3 then
        b = c + 1
        MsgBox "After b= c + 1", vbOKOnly , "Debug-Time Trace"
    else
      if a = 1 then
          b = c + 4
          MsgBox "After b= c + 4", vbOKOnly , "Debug-Time Trace"
      else
          if < -2 then
             b = c + 7
             MsgBox "After b= c + 7" vbOKOnly , "Debug-Time Trace"
          end if
       end if
    end if

  2. The key is to inspect the values of the variables and the variable type of the
    variables:
dim strVarP, strVarQ, strVarR
' Retrieve the subtype and value of each of the variables and then display_ it.
'    vbCrLf is used to separate lines in the output message.
strVarP = "(P) Subtype = " & VarType(P) & "  Value = " & P
strVarQ = "(Q) Subtype = " & VarType(Q) & "  Value = " & Q
strVarR = "(R) Subtype = " & VarType(R ) & "  Value = " & R
MsgBox  strVarP & vbCrLf & strVarQ & vbCrLf & strVarR, vbOKOnly, "Debug Variables"

r = q / p

This code will print the value and subtype of each variable. This trace code must be inserted before the problem statement. If you inserted it after the problem statement, the runtime error would occur first and your trace statement would never be reached (unless you used On Error Resume Next).
The statements will print the variable's current value as well as the subtype, but nothing will be displayed when printing the value of an empty or a null variable. In some cases, the subtype of the variable may be empty or null. If so, the value returned by the VarType function will provide you with this information. (See Day 4 for a full discussion of VarType capabilities.) For other subtypes, the standard subtype and value of the variable are displayed.
With this information on each variable involved in the equation, you should be able to pinpoint the cause of any type of error that occurs. Inspection of this information would show that one of the variables being used in the division has an underlying subtype of double (VarType = 5) and the other has an underlying subtype of string data (VarType = 8). The remaining variable has a subtype of empty (VarType = 0), but that could be correct since that is the result variable and perhaps no values have yet been assigned to it. The fact that a string is being used in the division, however, should be enough to tell you there is an errant code assignment somewhere, and lead you to other areas of the code to find the culprit. One potential cause of such a problem could be code like the following:
dim p, q, r
p = 1.3
q = "a"
 
 
 
r = q / p

This type of error is obvious if the statements are clustered together, but if the assignments are not in the vicinity of the division statement, then analyzing variables is usually a necessary first step to knowing where to look for the cause of the problem.
Another way to carry out the same type of analysis would be to use the VarAnalyze procedure. This procedure provides the same capabilities as the code snippet above, but the procedure itself generates information each time it is called. The procedure also provides a verbal description of the VarType (such as empty) rather than just the numeric value. If the VarAnalyze procedure were used, the trace would appear like this:
' Retrieve the subtype and value of each of the variables and then display_ it.
'    vbCrLf is used to separate lines in the output message.
VarAnalyze ("Contents of  p prior to the division: ", p)
VarAnalyze ("Contents of  q prior to the division: ", q)
VarAnalyze ("Contents of  r prior to the division: ", r)
r = q / p

Day 18

  1. The name is formed by joining the anchor name with the OnClick event:
    sub lnkBooks_OnClick
    . . .
    end sub

  2. The name is formed by joining the anchor name with the OnClick event:
    sub lnkBooks_MouseMove (s, b, x, y)
    . . .
    end sub

  3. You can redirect the link with the location object's HREF property. Just assign the Uniform Resource Locator address of the page you wish to visit to location.href.
sub lnkBooks_Click
    location.href = "http://www.microsoft.com/vbscript"
end sub

Day 19

  1. You must supply a return value with the form OnSubmit method, by making the one-line modification as shown in the following code:
       ' Make sure the user age is 18 or over
       if document.frmApply.txtAge.value < 18 then
           MsgBox "Sorry youngster, you're not old enough to apply!", _
               vbOKOnly,"Can't take app"
    frmApply_OnSubmit=False
       else
           document.frmApply.Submit
           MsgBox "Application processed", vbOKOnly, "Confirmation"
    frmApply_OnSubmit=True
       end if
    end sub
    -->

  2. The following is the modified code:
<!--
Function frmApply_OnSubmit
' Process the application by submitting to server if data is valid

   ' Make sure the user age is 18 or over
   if document.frmApply.txtAge.value < 18 then
       MsgBox "Sorry youngster, you're not old enough to apply!", _
           vbOKOnly,"Can't take the application"
   elseif len(document.frmName) = 0 then
frmApply_OnSubmit=False
       MsgBox "Sorry, we can't take an application from just nobody!",
           vbOKOnly,"Can't take app"
frmApply_ONSubmit=false
   else
       document.frmApply.Submit
       MsgBox "Application processed", vbOKOnly, "Confirmation"
frmApply_OnSubmit=True
   end if
end function
-->
</script>

Day 20

  1. VBScript cannot make use of DLLs, so the option of using the DLL in the code is out. You could rewrite the DLL code into an ActiveX control if you have a language such as C++ that can generate these controls. Then you could make use of that from within your VBScript for the same purpose, or you could rewrite the DLL code into script subroutines, which are themselves a part of the script. This approach is likely to be too cumbersome if there is too much code in the DLL. Most likely the ActiveX control strategy is the quickest path to reach the same level of function in the script as the original program.
  2. (a)VBScript does not support constants, so TAX_RATE and ITEM_PRICE must be declared as variables. (b)VBScript only supports the variant variable type, so the variable declarations for intUnits and intCost must be modified accordingly. (c)The value assigned to intCost will no longer be an integer under VBScript. Under VBScript the variable will have to be declared to be of type variant because that's the only type supported. Because a variant can assume any type, the variable will assume a single type (decimal point number) after this assignment.
  3. The following is the code, modified to work for VBScript:
dim TAX_RATE
dim ITEM_PRICE
Dim intUnits as Integer
Dim intCost as Integer

' Set up constant values
TAX_RATE = 0.04
ITEM_PRICE = 25

' Calculate the total cost
intUnits = InputBox("How many units do you wish to purchase?")
intCost = (ITEM_PRICE * intUnits) * TAX_RATE
' Store cost in its integer representation
intCost = cInt(intCost)

Day 21

  1. Any language features that relate to external communication and control fall into this category. They include normal file input and output, clipboard support, printer object support, dynamic link library calls, and calls to system application programming interfaces.
  2. Commercial controls with the highest level of certification have been verified by an independent certification laboratory. This does not mean they are bug free, but it does imply an overall level of general soundness. If a control is certified, it carries with it a digital signature so that the creator of the control is clearly and uniquely identified. This provides a trail of accountability if any problems occur.