总结 本期共有两人答题,只有一人实现动画所示的全部功能。 解题方法: 1 是用VBE对象编程。 2 是使用脚本对象 ScriptControl 一开始收到的答案都是从VBE编程入手的,但都只能实现第一步。 我对VBE编程并不熟悉,也没有花时间了解。主要原因:无法移植到VB中。 两位答题者提供的VBE方法,都不能实现第二步功能。 参考二位的代码,把VBE的方法完善了,供参考。 关于代码创建的控件,无法与事件代码关联的原因,以下比喻也许可以帮助理解: 如果把控件比作人的躯体,把事件代码比作人的意识。 设计时画上去的控件,就像从娘胎里生出来的正常人,躯体和意识在娘胎里已经捆绑(先期绑定)好了。 这个人是有意识、反应的。 运行时代码创建的控件就像个植物人,虽然有预先写有事件代码,但没有反应。(人也在魂也在,可就不再一块) 还缺一个招魂手续(后期绑定),必须用 WithEvents 关键字 和Set方法实现。 (呵呵,迷信与科学在这里完美结合,这个比喻可形象??) 具体代码见附件。 比较好的方法是利用 ScriptControl 对象 也可以创建一个ScriptControl控件,需引用 Microsoft Script Control 1.0 它的位置通常在 C:\windows\system32\msscript.oca 不管是使用控件 还是 用CreateObject函数 创建对象 ,都要设置Language 属性 设置 Language 属性时,language 可以是 VBScript、JScript(TM) 或其他任何适当的 Script 语言。 (上文中的 Script 就是脚本的意思---ldy) 用的最广泛的还是VBScript ,它与VBA一脉相承,语法一致,绝大部分方法函数通用 Set sp1 = CreateObject("ScriptControl") sp1.Language = "VBScript" 初次接触ScriptControl 对象 必须知道以下三个方法(结合附件中代码看) 1;添加对象 语法: ScriptControl.AddObject(name, object[, addmembers]) AddObject 方法的语法有以下部分: 部分 描述 name 必选。ScriptControl 代码中的名称,根据此名称识别添加的对象。 object 必选。要引用的对象,窗体、控件、单元格、application、 实例化后的类(也就是New了以后)等等 addmembers 可选。Boolean 值。当 ScriptControl 及其成员可全局访问 object 成员时为 True,否则为 False(默认)。 (addmembers参数:只有在ScriptControl中添加模块后才有用,此列中忽略---ldy) 例: sp1.AddObject "userform1", Me '添加对象到 sp1中,这里是什么名称,文本中就写什么 sp1.AddObject "controls", Me.Controls '非必要 添加这个对像,文本中可以少写几个字 (否则文本中就要这样写:userform1.controls) 2:添加代码 语法:object.AddCode code AddCode 方法的语法有以下部分: 部分 描述 object 必选。要添加代码的对象(ScriptControl)或对此对象的引用。 code 必选。字符串,包含要添加到对象中的代码。 例: sp1.AddCode s '添加代码 3:添加完对象、代码,就要让代码跑(Run)起来了 语法:object.Run(procedureName, arg1, arg2, _, argn)) Run 方法的语法有以下部分: 部分 描述 object 必选。所要运行过程的对象(ScriptControl)或对此对象的引用。 procedureName 必选。所要运行过程的字符串名称。 arg1 - argn 可选的,任何提供给被运行的过程的参数。此列中的过程没有附带参数,忽略 例: sp1.Run "addcontrols" '运行addcontrols过程 掌握了这三个方法,就可以玩出很多花样了。 需要注意: 1: VBScript中的数据类型只有一种: 就是 Variant(变体、不指定) 像这样的语句 Dim s as string 或Dim s as Variant 或 Dim s$ 在 VBScript是行不通的 通常在过程中,Dim语句是不需要出现的,如果一定要写 只能写成 Dim s
2: 常用的With.......End With 语句,VBScript也是不支持的,只有多打几个字了。 3:错误处理语句: 只有 On Error Resume Next 能用,如果用 On Error Goto 1 则出错 其他更详细的请参考 “VBScript 语言参考” http://www.microsoft.com/china/vbscript/vbslang/vbstoc.htm
利用 ScriptControl 对象来运行脚本,为编写程序带来极大的便利性,但又牺牲了部分代码的保密性。 脚本代码就是一串字符串,不一定非得保存在文本文件中,可以存在数据库、EXCEL单元格里等等。 如果不想其他人看懂脚本代码,可以对字符串加密。 在执行addcode方法之前解密,关于字符串加密解密的例子,论坛上有很多,这里就不介绍了。
[此贴子已经被作者于2008-5-27 2:36:21编辑过] |