ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 7276|回复: 16

[VBA程序开发] [分享]VBScript语言参考

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-1-28 16:37 | 显示全部楼层 |阅读模式
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

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-1-28 17:06 | 显示全部楼层
谢谢楼主,以后学习

TA的精华主题

TA的得分主题

发表于 2011-6-20 23:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢分享,收藏学习。

TA的精华主题

TA的得分主题

发表于 2011-6-23 18:23 | 显示全部楼层
谢谢分享,收藏了。这个一定要看看。

TA的精华主题

TA的得分主题

发表于 2011-6-28 16:55 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-10-15 09:19 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-10-18 12:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-11-24 17:40 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-11-24 19:05 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-3-13 17:01 | 显示全部楼层
找了好多地方,还是这里的最好。
就连MS家里的都不及这个。地址如下:
http://www.microsoft.com/china/vbscript/vbstutor/vbstutor.htm
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-24 04:50 , Processed in 0.047635 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表