Microsoft KB Archive/184745

= How To Use Script Control Modules and Procedures Collections =

Article ID: 184745

Article Last Modified on 7/13/2004

-

APPLIES TO


 * Microsoft Visual Basic 5.0 Learning Edition
 * Microsoft Visual Basic 6.0 Learning Edition
 * Microsoft Visual Basic 5.0 Professional Edition
 * Microsoft Visual Basic 6.0 Professional Edition
 * Microsoft Visual Basic 5.0 Enterprise Edition
 * Microsoft Visual Basic 6.0 Enterprise Edition
 * Microsoft Visual Basic 4.0 Standard Edition
 * Microsoft Visual Basic 4.0 Professional Edition
 * Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
 * Microsoft Visual Basic for Applications 5.0

-



This article was previously published under Q184745



SUMMARY
This article demonstrates how to use the Modules and Procedures properties of the Microsoft Script control to segment code. It also demonstrates how you can dynamically determine the number of arguments and whether the procedure is a Function or Sub.



MORE INFORMATION
The Microsoft Script control includes features that allow the host application to segment scripts into different modules. The default module, "Global", is always present. Different modules may contain procedures of the same name (that is, procedure names have module scope).

The Microsoft Script control also includes procedure properties that allow the host application to dynamically determine whether the procedure is a Function or a Sub as well as the number of arguments it expects. This allows the host application to prompt the user for the correct number of parameter values.

The Modules property of the Script control is an object that contains a collection of module objects. It has the following properties and methods:


 * Count: The number of modules.
 * Item(x): Returns a single Module object.
 * Add name: Adds a blank module with the given name.

The Module Object has the following properties and methods:


 * Name: The module name.
 * Procedures: The Procedures object.
 * AddCode code: Adds the code to the module.
 * Run name, args: Runs the named procedure.

The Procedures object contains a collection of Procedure objects. It has the following properties and methods:


 * Count: The number of procedures in the module.
 * Item(x): Returns a single Procedure object.

The Procedure object has the following properties and methods:


 * Name: The procedure name.
 * HasReturnValue: Indicates whether the procedure is a Sub or a Function.
 * NumArgs: The number of arguments the procedure requires.

NOTE: Not all properties and methods of the listed objects are given, just those relevant to this article.

The following example provides an interactive program that illustrates how to use these properties and methods:

IMPORTANT: Microsoft provides programming examples for illustration only, without warranty either expressed or implied, including, but not limited to, the implied warranties of merchantability and/or fitness for a particular purpose. This article assumes that you are familiar with the programming language being demonstrated and the tools used to create and debug procedures.

Example
 In Visual Basic, create a new project (Form1 is created by default). Click Components on the Project menu, and then select the "Microsoft Script Control 1.0" check box. Add the Script control (ScriptControl1), a text box (Text1), three command buttons (Command1, Command2, Command3), and two list boxes (List1, List2) to Form1. Set the MultiLine property of the text box to TRUE. Size the text box to accommodate 5 lines of 30 characters.  Add the following code to Form1: Private Sub Command1_Click ScriptControl1.Modules.Add Text1.Text Form_Activate End Sub

Private Sub Command2_Click ScriptControl1.Modules(List1).AddCode Text1.Text List1_Click End Sub

Private Sub Command3_Click Dim RetVal As Variant, m As Variant Set m = ScriptControl1.Modules(List1.Text) With m.Procedures(List2.Text) Select Case .NumArgs Case 0 RetVal = m.Run(List2.Text) Case 1 RetVal = m.Run(List2.Text, 5) Case 2 RetVal = m.Run(List2.Text, 4, 23) Case Else MsgBox "Procedure has too many arguments" End Select If .HasReturnValue Then MsgBox List2.Text & " returned: " & RetVal End If       End With End Sub

Private Sub Form_Activate Dim m As Variant List1.Clear With SCriptControl1 .Language = "VBScript" .AllowUI = True For Each m In .Modules List1.AddItem m.Name Next m       End With End Sub

Private Sub Form_Load Command1.Caption = "Add Module" Command2.Caption = "Add Code" Command3.Caption = "Run Procedure" End Sub

Private Sub List1_Click Dim m As String, p As Variant m = List1 List2.Clear If m = "" Then Exit Sub For Each p In ScriptControl1.Modules(m).Procedures List2.AddItem p.Name Next p     End Sub

Private Sub List2_Click Dim m As String, p As String, r As Boolean, a As Long m = List1 p = List2 With ScriptControl1.Modules(m).Procedures(p) r = .HasReturnValue a = .NumArgs End With MsgBox m & "." & p & " has " & IIf(r, "a", "no") & _ " return value and " & a & " arguments" End Sub  Run Form1.  Create a new module by typing the following in the text box and clicking Add Module: Mod2

  Type the following script in the text box: Function Calc(X) Calc = X * 2 End Function </li> Select Global in List1, and then click Add Code to add to the global module.</li>  Type the following script into the text box: Function Calc(X, Y)       Calc = X * Y      End Function

Sub Test MsgBox "The Test Sub in Module Mod2" End Sub </li> Select Mod2 in List1, and then click Add Code to add to the global module.</li> Click on the various modules and procedures. When you select the procedure a message box appears, indicating whether the procedure has a return value as well as the number of arguments it takes.</li> After selecting a procedure, click Run Procedure to run it. The code determines the number of arguments to use and you will see varying message boxes with the results.</li></ol>

NOTE:


 * The global module name might not always be "Global" depending on control version or localization. Use the GlobalName constant instead of hard- coding the word "Global".
 * There is no method to remove individual modules or procedures. You have to use the .Clear method of the script control to erase all code. You can overwrite a procedure by using the .AddCode method with a procedure of the same name.

<div class="references_section">