|
VBScript可以算是VB语言的老祖宗了,不光在网页编辑中大量使用,在VBA中也常常用到,
如操作文件一般会写CreateObject("Scripting.FileSystemObject")
附件是vbs的语言参考。
VBScript语言参考.part1.rar
(300 KB, 下载次数: 376)
VBScript语言参考.part2.rar
(214.79 KB, 下载次数: 379)
VBScript在VBA中的使用
什么是 VBScript?
Microsoft Visual Basic Scripting Edition 是程序开发语言 Visual Basic 家族的最新成员,它将灵活的脚本应用于更广泛的领域,包括 Microsoft Internet Explorer 中的 Web 客户机脚本和 Microsoft Internet Information Service 中的 Web 服务器脚本。
如果您已了解 Visual Basic 或 Visual Basic for Applications,就会很快熟悉 VBScript。VBScript 与浏览器集成在一起,OCX组件在系统目录下(c:\windows\system32\msscript.ocx)。我们能用这个组件在其他应用程序中作为普通脚本语言使用。
(一)创建ScriptControl控件实例
方法一:
Dim sc
Set sc = CreateObject("MSScriptControl.ScriptControl")
请注意变量 sc 并未声明为类型 ScriptControl,这里VBScript作为一个独立的 Automation 对象创建出来而不需要在工程中引用任何部件,只要 Script 控件存在你的系统目录中并已注册。
如果在工程中对 Script 控件进行显式引用,那么用户就可以用下面的代码创建 Script 控件的一个实例:Dim sc As ScriptControl
方法二:
VBScript可作为VBA的一个控件画到窗体中,为此你必须在控件工具栏中引用msscript.ocx,但一般没有必要这么做,因为在运行时此控件是不可见的。
(二)ScriptControl的属性和方法。
如果我们在工程中已引用了ScriptControl,那么在代码中在其引用的变量后输入“.”时,系统将自动列出所有的属性和方法。
属性名称 类型 备注
AllowUI BOOL 检测是否允许运行用户的接口元素。如果为False,则诸如消息框之类的界面元素不可见。
CodeObject Object 脚本暴露给宿主调用的对象。只读。
Modules Modules 宿主提供给脚本的组件库模块。只读。(COM组件通常都是以对象收集的形式向用户提供可以留给用户二次开发的对象集合,每一个收集即一个Modules)
Language String 设置或获取脚本引擎解释的语言,例如:VBScript、JScript。
Name String 脚本引擎的名称。只读。
Procedures Procedures 返回模块中定义的过程的集合
SitehWnd HWND 在脚本中显示UI的父窗口句柄
State Enum 设置或返回控件的状态,如果为0,控件只执行语句但不转发事件,为1则为加入的本控件接受的对象转发事件。
Timeout Long 控件的执行脚本的超时值,-1表示不超时
UseSafeSubset BOOL 设置或返回宿主程序是否关心安全。宿主程序的安全级别可以从此属性设置
Error Error 错误对象,发生错误时,此属性返回一个错误对象
方法名称 参数 功能
AddCode Code As String 往脚本引擎中加入要执行的脚本
AddObject Name As String, Object As Object, [AddMembers As Boolean = False] 往脚本引擎加入一个对象,以便在脚本中可以使用该对象提供的方法等。
Eval Expression As String 表达式求值
ExecuteStatement Statement As String 解释并执行脚本语句
Reset 丢弃所有的对象和代码,将State属性置0。
Run ProcedureName As String, ParamArray Parameters() As Variant 运行一个指定的过程
事件名称 功能
Error 有错误发生时激发该事件
TimeOut 执行过程超时时发生
(三)说明:
1、ScriptControl一般使用方法
定义一个ScriptControl的实例 → 调用AddCode等方法加入要执行的代码。→ 调用Run执行代码。
2、AllowUI属性
AllowUI 属性决定了Scripting引擎是否可以显示用户接口元素。这可以应用于Script控件本身,例如显示超时消息。也可以应用于使用ActiveX scripting接口的scripting引擎。例如,下面的代码将在试图显示Hello World消息框时产生一个错误:
ScriptControl1.AllowUI = False
Dim strX As String
strX = "Sub Hello" & vbCrLf & _
"MsgBox ""Hello World""" & vbCrLf & _
"End Sub"
ScriptControl1.AddCode strX
ScriptControl1.Run "Hello" ' 没有允许的 UI
3、Language属性
设定该组件所使用的语言:VbScript、JavaScript(也可缩写为Jscript)
当在窗体上作为控件画出Script Control时,Language属性就被自动初始化为"VBScript"。当作为一个Automation对象来创建Script Control时,则Language属性为未初始化的状态,必须由用户对其进行设置。
4、AddCode 方法将完整的过程添加到 Script 控件中。如果用户试图将一个不完整的过程(一个没有 End Sub 或者 End Function 的过程)添加进去,则将会出错。
‘~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
‘ 当 ScriptRun 应用程序加载时,添加下面的代码
‘ 将 NameMe 过程添加到 Control 中。
Private Sub Form_Load()
Dim strCode As String
strCode = "Sub NameMe()" & vbCrLf & _
" Dim strName As String" & vbCrLf & _
" strName = InputBox(""Name?"")" & vbCrLf & _
" MsgBox ""Your name is "" & strName" & vbcrLf & _
"End Sub"
ScriptControl1.AddCode strCode
ScriptControl1.Run
End Sub
‘~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
‘ 用户可以将参数添加到某个过程或者函数中。
Private Sub EvalFunc()
‘ 创建函数。
Dim strFunction As String
strFunction = _
"Function ReturnThis(x, y)" & vbCrLf & _
" ReturnThis = x * y" & vbCrLf & _
"End Function"
‘ 添加代码,然后运行该函数。
ScriptControl1.AddCode strFunction
‘ Run方法运行任何已被添加到 Script 控件中的完整过程。
MsgBox ScriptControl1.Run("ReturnThis", 2, 9)
End Sub
5、ExecuteStatement 方法执行一条 scripting 语句,用Eval方法计算某个表达式值。
Private Sub TryThis()
ScriptControl1.ExecuteStatement "x = 100" ‘ 将值 100 赋给变量 x
MsgBox ScriptControl1.Eval("x = 100") ‘ 返回 True
MsgBox ScriptControl1.Eval("x = 100/2") ‘ 返回 False
End Sub
6、Error 属性
Script 控件错误有两个可能来源:Script 控件自身,或者该控件试图运行的 script脚本。为了对 scripting 代码进行调试,可使用 Error 属性,该属性返回对 Error 对象的引用。利用 Error 对象,Script 控件可以返回错误数目和对它的描述,以及错误在 script 中出现的行号。
运行下面的代码查看 Script 控件发现错误的一个示例:
Private Sub MyError()
‘ 下面的代码被零除导致一个错误。
Dim strCode As String
strCode = "Sub DivideByZero()" & vbCrLf & _
"Dim prime" & vbCrLf & "prime = 3" & vbCrLf & _
"MsgBox prime/0" & vbCrLf & "End Sub"
On Error GoTo scError
With ScriptControl1
.AddCode strCode
.Run "DivideByZero"
End With
Exit Sub
scError:
‘ 使用 Error 对象向用户通告错误,以及出错行。
Debug.Print ScriptControl1.Error.Number & _
": " & ScriptControl1.Error.Description & _
", in line " & ScriptControl1.Error.Line
End Sub
7、宿主与脚本的通讯
宿主调用脚本:这个过程比较简单,只要调用Run就可以将参数传递到脚本。
脚本调用宿主:在初始化过程中调用AddObject接口,将宿主的一个或多个对象暴露给脚本,这时就可以在脚本中调用宿主对象的方法。
(四)经典示例
1、用Eval函数实现最简单的数学表达式的计算
例如:Msgbox ScriptControl1.Eval(“3+2^6/2”)
2、实现数据加密
在JavaScript里有两个函数Escape和Unescape,一般都是用作Html代码里的对Script进行加密时使用,目的是为了防止别人直接查看其脚本,以其乱码形式显示。
加密Result = sc.Eval(escape(myString)) 解密myString = sc.Eval(unescape(Result))
[ 本帖最后由 jmey 于 2011-1-28 22:29 编辑 ] |
评分
-
1
查看全部评分
-
|