在VBA中使用JAVASCRIPT和VBSCRIPT

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在VBA中使用JAVASCRIPT和VBSCRIPT(1)javascript有许多函数和功能可以弥补VBA不足,如正则,数组,类,等等1)以数组为例,用JAVASCRIPT排序
Sub fig8()
Set x = CreateObject("msscriptcontrol.scriptcontrol")
nguage = "javascript"
arr = Array("aa", "cc", "bb", "1a")
kk = Join(arr, ",")
x.addcode "function aa(bb){x=bb.split(',');x.sort();return x;}"
cc = x.eval("aa('" & kk & "')")
MsgBox cc
End Sub
2)1)以数组为例,用JAVASCRIPT倒序
Sub fig8()
Set x = CreateObject("msscriptcontrol.scriptcontrol")
nguage = "javascript"
arr = Array("aa", "cc", "bb", "1a")
kk = Join(arr, ",")
x.addcode "function aa(bb){x=bb.split(',');x.reverse();return x;}" cc = x.eval("aa('" & kk & "')")
MsgBox cc
End Sub
用VBSCRIPT的简单例子
Sub fig8()
Set x = CreateObject("msscriptcontrol.scriptcontrol")
nguage = "vbscript"
x.addcode "sub aa(): msgbox ""hello.."":end sub "
x.Run "aa"
End Sub
以前需要分开好几个模块,函数,现在可以统统放在一起了。

Sub fig8()
Set x = CreateObject("msscriptcontrol.scriptcontrol")
nguage = "vbscript"
x.addcode "sub aa(): msgbox ""hello.."":end sub : sub bb:msgbox 3:end sub :sub cc: msgbox ""cc"":end sub"
x.Run "aa"
x.Run "bb"
x.Run "cc"
End Sub
自定义函数的用法
Sub fig8()
Set x = CreateObject("msscriptcontrol.scriptcontrol")
nguage = "vbscript"
x.addcode "function sum(x,y):sum=x+y:end function "
bb = x.Run("sum", 2, 3)
MsgBox bb
End Sub
动态改变窗口,文本框,单元格,range属性,
'本例改[A1:z888]单元格为红色
Sub fig88()
Set X = CreateObject("msscriptcontrol.scriptcontrol")
nguage = "vbscript"
X.addcode "SUB AA:XX.INTERIOR.COLORINDEX=3:END SUB "
X.ADDOBJECT "XX", [A1:z888]
X.Run "AA"
End Sub
设置和调用全局变量
Sub figvb()
Set x = CreateObject("msscriptcontrol.scriptcontrol")
nguage = "vbscript"
x.addcode "public x: sub aa(bb):x=bb*100:end sub"
x.Run "aa", 3
b = x.codeobject.x
MsgBox b
End Sub
代码放在单元格里不再是笑话:)
Sub figvbs()
Set x = CreateObject("msscriptcontrol.scriptcontrol")
nguage = "vbscript"
[a1] = "a1=3"
[a2] = "b1=4"
[a3] = "msgbox a1+b1"
For i = 1 To 3
x.executestatement Cells(i, 1)
Next
End Sub
新建类可以不再需要类模块
Sub figvbs()
Set X = CreateObject("msscriptcontrol.scriptcontrol")
nguage = "vbscript"
X.ADDCODE "CLASS AA:PUBLIC SUB TEST():MSGBOX ""类模块"":END SUB:END CLASS" X.ADDCODE "SET YY=NEW AA"
Set RR = X.EVAL("YY")
RR.TEST
End Sub
表达式可以直接拿来运算
Sub aa()
Set X = CreateObject("msscriptcontrol.scriptcontrol")
nguage = "vbscript"
Dim ARR(2)
ARR(0) = "3"
ARR(1) = "4*6"
ARR(2) = "SIN(5)"
KK = Join(ARR, "+")
BB = X.EXECUTESTATEMENT("MSGBOX " & KK)
KK = Join(ARR, "*")
BB = X.EXECUTESTATEMENT("MSGBOX " & KK)
End Sub
msgbox ,inputbox 也可以作为变量
Sub figtest1()
Set x = CreateObject("msscriptcontrol.scriptcontrol")
nguage = "vbscript"
aa = "msgbox "
bb = "cc=inputbox"
For i = 1 To 4
If i Mod 2 = 0 Then
kk = aa & " " & i
Else
kk = bb & "(" & i & ")"
End If
x.executestatement (kk)
Next
End Sub
字符串加密(md5)
Sub figtest1()
Set X = CreateObject("msscriptcontrol.scriptcontrol")
nguage = "vbscript"
X.ADDCODE "Function x(s):Set y= CreateObject(""CAPICOM.HashedData""):y.Algorithm =3:" & _
"y.Hash s:z = y.Value:x = z:End Function"
BB = X.Run("x", "FIGFIG")
MsgBox "字符 FIGFIG 加密后是: " & BB
End Sub
数组也可以随意切割了
Sub JSArraySample()
Set objJS = CreateObject("ScriptControl")
With objJS
.Language = "JScript"
.AddCode "function JSSplit(s,d){return s.split(d);}"
End With
文字列 = "a,b,c,d,e"
Set b = objJS.CodeObject.JSSplit(文字列, ",")
' '数组也可以随意切割了
MsgBox b.slice(0, 1)
MsgBox b.slice(1, 2)
MsgBox b.slice(2, 5)
End Sub
功能更加强大的正则表达式
Sub figexp()
Set js = CreateObject("ScriptControl")
nguage = "JScript"
script = "'abcdefg'.match(/a/)"
result = js.eval(script)
MsgBox result
End Sub
jscript返回的对象应该是一个数组,可以在VB直接调用相关函数,但又可以直接显示所有元素
Sub Mytest()
Set sp1 = CreateObject("ScriptControl")
nguage = "JScript"
s = "function sortarr(arr){return arr.toArray();}" '顺序
sp1.AddCode s
aa = Array("张", "王", "李", "赵", "钱", "孙", "周", "吴", "郑", "王")
Set bb = sp1.codeobject.sortarr(aa)
MsgBox bb
MsgBox bb.slice(1, 4)
MsgBox bb.concat("888").concat("777")
bb.push ("999")
MsgBox bb
End Sub
数组非交集
Sub figjs()
arr1 = [a2:a11]
arr2 = [b2:b6]
Set x = CreateObject("scriptcontrol")
nguage = "jscript"
x.eval ("function aa(aa) {return aa.toArray();}")
Set arr3 = x.eval("new Array();")
Set y = x.codeobject.aa(arr1)
Set z = x.codeobject.aa(arr2)
Set m = y.concat(z)
For Each mm In m
If InStrRev(m, mm) = InStr(m, mm) Then arr3.push mm
Next
MsgBox arr3
End Sub
其他的强大的数组功能
Sub Mytest()
Set sp1 = CreateObject("ScriptControl")
nguage = "JScript"
s = "function sortarr(arr){return arr.toArray();}" '顺序
sp1.AddCode s
aa = Array("张", "王", "李", "赵", "钱", "孙", "周", "吴", "郑", "王") Set bb = sp1.codeobject.sortarr(aa)
bb.push ("999") '直接添加到数组末尾,不再需要重定义
MsgBox bb
bb.unshift ("888") '直接添加到数组开头,不再需要重定义
MsgBox bb
bb.pop '删除最后一个元素
MsgBox bb
bb.shift '删除最前一个元素
MsgBox bb
bb.splice 2, 3, "a", "b", "c" '直接替换数组
MsgBox bb
End Sub
Sub tst004()
Set objIE = CreateObject("InternetExplorer.Application")
.Navigate "about:blank"
.Visible = 1
End With
Do While objIE.Busy = True
DoEvents
Loop
objIE.Document.Write "TEST" & Chr(10)
End Sub
Sub tst004()
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Navigate "about:blank"
.Visible = 1
End With
Do While ie.Busy = True
DoEvents
Loop
ie.document.write "<HTML><BODY><script>function abcd(){alert('你输入的是:'+document.F1.T1.value);};</script><form name=F1 > <input type=text name=T1 size=20> <input type=button value=验证onClick='abcd()'></form></BODY></HTML>"
End Sub
数组的读取
Sub figjjs()
Set x = CreateObject("scriptcontrol")
nguage = "jscript"
Set y = x.eval("aa=new Array()")
For i = 1 To 100
Next
kk = 8
MsgBox x.eval("aa[" & kk & "]")
End Sub
把多维数组转换为一维
Sub kk()
[a1] = 1
[a2] = 2
[b1] = 3
[b2] = 4
Dim sc As Object
Set sc = CreateObject("ScriptControl")
nguage = "JScript"
a = [a1:b2]
sc.AddCode "function aa(a){return new VBArray(a).toArray();}" Set n = sc.CodeObject.aa(a)
MsgBox n
End Sub
把单元格作为对象传入js里
Sub ava()
Set x = CreateObject("scriptcontrol")
nguage = "jscript"
x.eval "function aa(aa) {return aa.value.toArray()}"
Set y = x.Run("aa", [a1:b4])
MsgBox y
End Sub
把单元格作为对象传入js里
Sub ava()
Set x = CreateObject("scriptcontrol")
nguage = "jscript"
x.eval "function aa(aa) {return aa.font.colorindex}"
y = x.Run("aa", [a1])
MsgBox y
End Sub
把workbook对象传入js里
Sub ava()
Set x = CreateObject("scriptcontrol")
nguage = "jscript"
x.eval "function aa(aa) {return aa.sheets.count}"
y = x.Run("aa", ThisWorkbook)
MsgBox y
End Sub
传入WORKBOOK,输出A1单元格
Sub ff()
Set x = CreateObject("scriptcontrol")
nguage = "jscript"
x.eval "function aa(aa) {return aa.sheets(1).cells(1,1)}"
Set y = x.Run("aa", ThisWorkbook)
MsgBox y
MsgBox y.Row
End Sub
创建对象和属性
Sub ff()
Set x = CreateObject("scriptcontrol")
nguage = "jscript"
x.eval "aa=new Object;aa.myname='fig7'"
Set y = x.eval("aa")
MsgBox y.myname
y.myname = "fig8"
MsgBox y.myname
End Sub
调用其他模块,JA V ASCRIPT 也可以有MSGBOX
注意把代码放入WORKBOOK,不能放入模块1,至于模块1应该传入什么对象,请版主和
其他高手有空研究一下,谢谢
这里传入ME,就是thisworkbook,可以调用BB函数,在模块1我试过传入APPLICATION 对象,但是不行,无法调用BB
如果用VBE.PROJECTS对象又要修改设置不太实用
Private Sub kkk()
Set m_sc = CreateObject("ScriptControl")
With m_sc
.Language = "JScript"
.AddObject "o", Me
.EV AL "o.bb()"
End With
End Sub
Public Sub bb()
MsgBox "kk"
End Sub
模块中可以传入thisworkbook
Private Sub kkk()
Set m_sc = CreateObject("ScriptControl")
With m_sc
.Language = "JScript"
.AddObject "o", ThisWorkbook
.EV AL "o.bb()"
End With
End Sub
Public Sub bb()
MsgBox "kk"
End Sub
window对象的那些方法
Sub ava()
Set x = CreateObject("scriptcontrol")
Set ie = CreateObject("htmlfile")
nguage = "jscript"
x.EV AL "function aa(aa) {aa.alert(1)}"
y = x.Run("aa", ie.parentWindow)
End Sub
请问figfig老师,怎么调用传入的对象的方法。

Sub ava()
Set x = CreateObject("scriptcontrol")
nguage = "jscript"
x.EV AL "function aa(aa) {aa.sheets(1).cells(1,1)=2}"
y = x.Run("aa", ThisWorkbook)
End Sub
Sub ava()
Set x = CreateObject("scriptcontrol")
nguage = "jscript"
x.EV AL "function aa(aa) {='b'}"
y = x.Run("aa", ActiveSheet)
End Sub
查出是哪个函数调用本函数,
Sub ava()
Set x = CreateObject("scriptcontrol")
Set ie = CreateObject("htmlfile")
nguage = "jscript"
x.EV AL "var WD;function gg() {WD.alert(gg.caller)};function aa(aa) {WD=aa;gg();}function bb(aa) {WD=aa;gg();}"
y = x.Run("aa", ie.parentWindow)
y = x.Run("bb", ie.parentWindow)
End Sub
Sub kkk()
Set ie = CreateObject("htmlfile")
Set win = ie.parentwindow
win.execscript "function aa(aa){alert(aa)}"
win.aa "bbb"
End Sub
Sub kkk()
Set ie = CreateObject("htmlfile")
Set win = ie.parentwindow
win.execscript "function aa(){alert(1);};function bb(){ll=setTimeout(aa(),1000)}"
ll = win.setInterval(win.aa, 1000)
MsgBox ll
End Sub
SETINTERV AL
Sub ava()
Set x = CreateObject("scriptcontrol")
Set ie = CreateObject("htmlfile")
nguage = "jscript"
x.EV AL "var WD;function gg() {WD.alert(2);};function aa(aa) {WD=aa;WD.alert(1);WD.setInterval(gg,1000);}"
y = x.Run("aa", ie.parentWindow)
MsgBox "暂时不要点确定"
End Sub
也可以这样,SETTIMEOUT
Sub ava()
Set x = CreateObject("scriptcontrol")
Set ie = CreateObject("htmlfile")
nguage = "jscript"
x.EV AL "var WD;function gg() {WD.alert(2);};function aa(aa) {WD=aa;WD.alert(1);WD.setTimeout(gg,1000);}"
y = x.Run("aa", ie.parentWindow)
For I = 1 To 8888888888888#
DoEvents
Next
End Sub
Sub ava()
Set x = CreateObject("scriptcontrol")
Set ie = CreateObject("htmlfile")
nguage = "jscript"
x.EV AL "var bb;function aa() {bb.range('a1')+=1;} ;function mm(cc,dd){bb=cc;dd.setInterval(aa,2000)}"
y = x.Run("mm", ActiveSheet, ie.parentWindow)
For i = 1 To 888888888888888#
DoEvents
Next
End Sub
可同时运行的程序
下面代码可以看出JSCRIPT好像是多线程的,可以同时运行其他VBA程序,
Sub ava()
Set x = CreateObject("scriptcontrol")
Set ie = CreateObject("htmlfile")
nguage = "jscript"
x.EV AL "var bb;function aa() {bb.range('a1')+=1;} ;function mm(cc,dd){bb=cc;dd.setInterval(aa,2000)}"
y = x.Run("mm", ActiveSheet, ie.parentWindow)
For i = 1 To 888888888888888#
[a2] = [a2] + 1
DoEvents
Next
End Sub
多线程,同时运行,突破VBA程序运行单线程限制
Sub ava()
Set x = CreateObject("scriptcontrol")
Set ie = CreateObject("htmlfile")
nguage = "jscript"
x.EV AL "var bb;function aa() {bb.range('a1')+=1;} ;function mm(cc,dd){bb=cc;dd.setInterval(aa,2000)}"
y = x.Run("mm", ActiveSheet, ie.parentWindow)
x.EV AL "var bb;function aa() {bb.range('a2')+=1;} ;function mm(cc,dd){bb=cc;dd.setInterval(aa,2000)}"
y = x.Run("mm", ActiveSheet, ie.parentWindow)
For i = 1 To 888888888888888#
[a3] = [a3] + 1
DoEvents
Next
End Sub
获得当前屏幕的长宽,不用API
Sub ava2()
Set ie = CreateObject("htmlfile")
Set win = ie.parentwindow
MsgBox win.screen.Width
End Sub
发送邮件
Sub sendmail()
CreateObject("htmlfile").parentwindow.Open "mailto:my@self.xyz?subject=hi&body=ha" End Sub
在VBA中使用JA V ASCRIPT和VBSCRIPT(2)
介绍JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

易于人阅读和编写。

同时也易于机器解析和生成。

它基于JavaScript Programming Language (/javascript), Standard ECMA-262 3rd Edition - December 1999(http://www.ecma-international.or ... cma-st/ECMA-262.pdf)的一个子集。

JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。

这些特性使JSON成为理想的数据交换语言。

JSON建构于两种结构:
“名称/值”对的集合(A collection of name/value pairs)。

不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组(associative array)。

值的有序列表(An ordered list of values)。

在大部分语言中,它被理解为数组(array)。

这些都是常见的数据结构。

事实上大部分现代计算机语言都以某种形式支持它们。

这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

JSON具有以下这些形式:
对象是一个无序的“‘名称/值’对”集合。

一个对象以“{”(左括号)开始,“}”(右括号)结束。

每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。

数组是值(value)的有序集合。

一个数组以“[”(左中括号)开始,“]”(右中括号)结束。

值之间使用“,”(逗号)分隔。

值(value)可以是双引号括起来的字符串(string)、数值(number)、ture、false、null、对象(object)或者数组(array)。

这些结构可以嵌套。

字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。

一个字符(character)即一个单独的字符串(character string)。

除去一些编码细节,以下描述了完整的语言。

字符串(string)与C或者Java的字符串非常相似。

除去未曾使用的八进制与十六进制格式,数值(number)也与C或者Java的数值非常相似。

空白可以加入到任何符号之间。

Sub figjson()
aa = "{ ""myname"":""figfig"", ""myid"":""888"" }"
Set x = CreateObject("ScriptControl")
nguage = "JScript"
s = "function j(s) { return eval('(' + s + ')'); }"
x.AddCode s
Set y = x.CodeObject.j(aa)
MsgBox y.myname
MsgBox y.myid
End Sub
例子2
Sub figjson2()
aa = "{myname:""alonely"", age:24, email:[""aa4@"",""aa@""], family:{parents:[""父亲"",""母亲""],toString:function(){return ""家庭成员"";}}}"
Set x = CreateObject("ScriptControl")
nguage = "JScript"
s = "function j(s) { return eval('(' + s + ')'); }"
x.AddCode s
Set y = x.Run("j", aa)
MsgBox y.myname
MsgBox y.age
MsgBox y.email
MsgBox y.family
MsgBox y.family.parents
End Sub
多重结构,树状显示,类似XML节点树,代码比XML简洁得多
Sub figjson3()
aa = "{""myname"":""Michael"",""myaddress"":{""city"":""Beijing"",""street"":"" Chaoyang Road "",""postcode"":100025}}"
Set X = CreateObject("ScriptControl")
nguage = "JScript"
s = "function j(s) { return eval('(' + s + ')'); }"
X.AddCode s
Set y = X.Run("j", aa)
MsgBox y.myname
MsgBox y.myaddress
MsgBox y.myaddress.city
MsgBox y.myaddress.postcode
End Sub
数组放入对象里
Sub figjson4()
aa = "{ ""people"": [{ ""firstName"": ""Brett"", ""lastName"":""McLaughlin"", ""email"": ""brett@"" },{ ""firstName"": ""Jason"", ""lastName"":""Hunter"", ""email"": ""jason@"" }, { ""firstName"": ""Elliotte"", ""lastName"":""Harold"", ""email"": ""elharo@"" }]}"
Set X = CreateObject("ScriptControl")
nguage = "JScript"
s = "function j(s) { return eval('(' + s + ').people[1]'); }"
X.AddCode s
Set y = X.Run("j", aa)
MsgBox y.firstName
MsgBox y.email
End Sub
可用单引号代替2个双引号,简化写法,如例子一
Sub figjson()
aa = "{ 'myname':'figfig', 'myid':'888' }"
Set x = CreateObject("ScriptControl")
nguage = "JScript"
s = "function j(s) { return eval('(' + s + ')'); }"
x.AddCode s
Set y = x.CodeObject.j(aa)
MsgBox y.myname
MsgBox y.myid
End Sub
在EXCEL中的应用
如SHEET1 A1单元格为AA, B1单元格为BB
Sub figjson()
aa = "{ '" & [a1] & "':'" & [b1] & " ' }"
Set x = CreateObject("ScriptControl")
nguage = "JScript"
s = "function j(s) { return eval('(' + s + ')'); }"
x.AddCode s
Set y = x.CodeObject.j(aa)
MsgBox y.aa
End Sub
传递数值值
Sub figjson()
Set x = CreateObject("ScriptControl")
nguage = "JScript"
s = "var a=2 ;var b=3;var cc={a:a,b:b}"
x.AddCode s
Set y =
MsgBox y.a
End Sub
动态添加数据
Sub figjson()
Set x = CreateObject("ScriptControl")
nguage = "JScript"
s = "var a=2 ;var b=3;var cc={a:a,b:b};cc['电话']=8888;"
x.AddCode s
Set y =
MsgBox y.电话
End Sub
数据动态变化
Sub figjson()
Set x = CreateObject("ScriptControl")
nguage = "JScript"
s = "var a=2 ;var b=3;var cc={a:a,b:b};cc['电话']=8888;"
x.AddCode s
Set y =
MsgBox y.电话
s = "cc['电话']=9999;"
x.AddCode s
MsgBox y.电话
End Sub
用变量来查询
Sub figjson()
Set x = CreateObject("ScriptControl")
nguage = "JScript"
s = "var cc={name:'figfig',id:'888',tel:'1234'};"
x.AddCode s
kk = "name"
y = x.eval("cc['" & kk & "']")
MsgBox y
kk = "id"
y = x.eval("cc['" & kk & "']")
MsgBox y
kk = "tel"
y = x.eval("cc['" & kk & "']")
MsgBox y
End Sub
与VB比较,代码更加简洁明了,可作为小型数据库Sub vb代码()
Name = "bb"
If Name = "aa" Then Address = "us"
If Name = "bb" Then Address = "cn"
If Name = "cc" Then Address = "uk"
MsgBox Address
Name = "cc"
If Name = "aa" Then Address = "us"
If Name = "bb" Then Address = "cn"
If Name = "cc" Then Address = "uk"
MsgBox Address
End Sub
Sub fjson代码()
Set x = CreateObject("ScriptControl")
nguage = "JScript"
s = "var address={aa:'us',bb:'cn',cc:'uk'}"
x.AddCode s
Name = "bb"
Address = x.eval("address['" & Name & "']")
MsgBox Address
Name = "cc"
Address = x.eval("address['" & Name & "']")
MsgBox Address
End Sub
类似数组,可增加和删除数据
Sub figjs()
Set x = CreateObject("ScriptControl")
nguage = "JScript"
s = "var address={bb:'0' };"
x.AddCode s
For i = 1 To 100
s = "address[" & i & "]=" & i & ";"
x.AddCode s
Next
Address = x.eval("address[88]")
MsgBox Address
Address = x.eval("address[77]")
MsgBox Address
x.eval ("delete address[77]")
Address = x.eval("address[77]")
MsgBox Address
End Sub
在VBA中使用JA V ASCRIPT和VBSCRIPT(3)
phpjs是用js实现php同名函数,对PHP熟悉而对JS一般熟悉的人一定写过一些类似PHP函数的JS函数,PHP的函数应该是这个世界上最丰富的函数库了,因为它是由全世界
各地PHPER共同完成的(不过很多PHP函数并没有内置,而需要额外安装)。

所以能实现PHP的函数的JS,那么在开发中应该是相当有利。

PHPJS是一个国外开源项目,就是以JA V ASCRIPT来实现PHP中的常用内置函数。

包括serialize(),强悍的file_get_contents(),强悍的file(),require
具体函数用法查询
/functions/index
已使用PHP的倒转字符串函数STRREV 为例
注意:先把附件的PHP.JS解压到c盘下面.
Sub figphp()
Set x = CreateObject("scriptcontrol")
nguage = "jscript"
Set f = CreateObject("scripting.filesystemobject")
f1 = f.opentextfile("c:\php.js").readall
x.addcode f1
aa = "hi,fig888 999"
y = x.codeobject.strrev(aa)
MsgBox y
End Sub
例子2"实现英文标题的正确大写函数
Sub figphp()
Set x = CreateObject("scriptcontrol")
nguage = "jscript"
Set f = CreateObject("scripting.filesystemobject")
f1 = f.opentextfile("c:\php.js").readall
x.addcode f1
aa = "hi fig888 k99"
y = x.codeobject.ucwords(aa)
MsgBox y
End Sub
例子3:按指定位置插入指定分隔符
Sub figphp()
Set x = CreateObject("scriptcontrol")
nguage = "jscript"
Set f = CreateObject("scripting.filesystemobject")
f1 = f.opentextfile("c:\php.js").readall
x.addcode f1
aa = "hi,fff,ml"
y = x.codeobject.chunk_split(aa, 3, "*")
MsgBox y
End Sub
例子4:计算字符出现次数
Sub figphp()
Set x = CreateObject("scriptcontrol")
nguage = "jscript"
Set f = CreateObject("scripting.filesystemobject")
f1 = f.opentextfile("c:\php.js").readall
x.addcode f1
aa = "hi,fff,ml"
y = x.codeobject.substr_count(aa, "f")
MsgBox y
End Sub
在VBA中使用JA V ASCRIPT和VBSCRIPT(3):用AJAX方式读取本地文件
1.先建立一个文本文件,保存为c:\aaa.txt
2.读取
Sub fig8()
Set x = CreateObject("scriptcontrol")
nguage = "jscript"
s = "function aa(aa) {var xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');xmlhttp.open('Get', aa, false); xmlhttp.send(null);return xmlhttp.responseText;};"
x.addcode s
y = x.codeobject.aa("c:\aaa.txt")
MsgBox y
End Sub
用XMLHTTP下载GOOGLE图标的代码
Function SaveWebFile(ByVal vWebFile As String, ByVal vLocalFile As String) As Boolean Dim oXMLHTTP As Object, i As Long, vFF As Long, oResp() As Byte
'You can also set a ref. to Microsoft XML, and Dim oXMLHTTP as MSXML2.XMLHTTP
Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
oXMLHTTP.Open "GET", vWebFile, False 'Open socket to get the website
oXMLHTTP.Send 'send request
'Wait for request to finish
Do While oXMLHTTP.readyState <> 4
DoEvents
Loop
oResp = oXMLHTTP.responseBody 'Returns the results as a byte array
'Create local file and save results to it
vFF = FreeFile
If Dir(vLocalFile) <> "" Then Kill vLocalFile
Open vLocalFile For Binary As #vFF
Put #vFF, , oResp
Close #vFF
'Clear memory
Set oXMLHTTP = Nothing
End Function
Sub TestingTheCode()
'This will save the Google logo to your hard drive, insert it into the
' active spreadsheet, then delete the local file
SaveWebFile "/intl/en/images/logo.gif", "C:\GoogleLogo.gif"
ActiveSheet.Pictures.Insert "C:\GoogleLogo.gif"
Kill "C:\GoogleLogo.gif"
End Sub
在JS中使用类
Sub hh()
Set x = CreateObject("scriptcontrol")
nguage = "jscript"
s = " function student(){='aaa'; this.age=20;this.getname=function(){return ;};this.getage=function(){return this.age;}}"
x.addcode s
x.executestatement "var s=new student(); i=s.getname();j=s.getage();"
y = x.eval("i")
MsgBox y
y = x.eval("j")
MsgBox y
End Sub
来自浏览器的MSGBOX
Sub hh()
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Navigate "about:blank"
.Visible = 0
End With
Do While ie.Busy = True
DoEvents
Loop
Set Win = ie.document.parentwindow
Set x = CreateObject("scriptcontrol")
nguage = "jscript"
x.AddObject "win", Win, True
x.ExecuteStatement " win.alert('aa');"
End Sub
使用JQUERY
1.首先从下载jquery,另存为C:\JQUERY.JS
2. 开始使用QUERY,,已JQUERY " HELLO" 为例
Sub figjs()
Set doc = CreateObject("htmlfile")
Set scr = doc.createelement("script")
scr.src = "c:\jquery.js"
doc.body.appendchild scr
Set scr = doc.createelement("script")
scr.Text = " $(document).ready(function(){ alert('Hello'); });"
doc.body.appendchild scr
Stop
End Sub
jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多javascript高手加
入其team,包括来自德国的Jörn Zaefferer,罗马尼亚的Stefan Petre等等。

jQuery是继prototype之后又一个优秀的Javascrīpt框架。

其宗旨是——WRITE LESS,DO MORE,写更少的代码,做更多的事情。

它是轻量级的js库(压缩后只有21k) ,这是其它的js库所不及的,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。

jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互。

jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。

jQuery能够使用户的html页保持代码和html内容分离,也就是说,不用再在html 里面插入一堆js来调用命令了,只需定义id即可。

Jquery是继prototype之后又一个优秀的Javascrīpt框架。

对prototype我使用不多,简单了解过。

但使用上jquery之后,马上被她的优雅吸引住了。

有人使用这样的一比喻来比较prototype和jquery:prototype就像Java,而jquery就像ruby.实际上我比较喜欢java(少接触Ruby 罢了)但是jquery的简单的实用的确有相当大的吸引力啊!在项目里我把jquery 作为自己唯一的框架类包。

使用其间也有一点点心得,其实这些心得,在jquery的文档上面也可能有讲,不过还是记下来,以备忘罢。

[编辑本段]一,找到你了!
还记得$()这个东西吧?无论prototype还是DWR都使用了这个函数代替document.getElementById()。

没错,jquery也跟风了。

为达到document.getElementById()的目的,jquery是这样写的:
代码
var someElement = $("#myId");
看起来比其他两个框架的要多了一个#,好,看看下面的用法:
代码
$("div p"); // (1)
$("div.container"); // (2)
$("div #msg"); // (3)
$("table a",context); // (4)
在prototype里看过这样的写法吗?第一行代码得到所有标签下的P元素。

第二行代码得到class 为container的元素,第三行代码得到标签下面id为msg的元素。

第四行代码得到context为上下文的table里面所有的连接元素。

如果你熟悉CSS,你会觉得这些写法很眼熟!对了。

正是。

看出奥妙了吧。

jquery 就是通过这样的方式来找到Dom对象里面的元素。

跟CSS的选择器相类似。

[编辑本段]二,Jquery对象?
jquery提供了很多遍历的函数,如each(fn),但是使用这些函数的前提是:你使用的对象是Jquery对象。

使一个Dom对象成为一个Jquery对象很简单,通过下面一些方式(只是一部分):
代码
var a = $("#cid");
var b = $("<p>hello</p>");
var c = document.createElement("table");
var tb = $(c);
[编辑本段]三,代替body标签的onload
这个惯例,也许是除了$()之外,用得最多的地方了。

下面一段代码:
代码
$(document).ready(function(){
alert("hello");
});(1)
<body onload="alert('hello');">(2)
上面两段代码是等价的。

但代码1的好处是做到表现和逻辑分离。

并且可以在不同的js文件中做相同的操作,即$(document).ready (fn)可以在一个页面中重复出现,而不会冲突。

基本上Jquery的很多plugin都是利用这个特性,正因为这个特性,多个plugin共同使用起来,在初始化时不会发生冲突。

不管怎么说,这个惯例可以分离javascrīpt与HTML。

推荐使用。

[编辑本段]四,事件机制
我大量使用的事件可能就是button的onclick了。

以前习惯在input 元素上写onclick = "fn()",使用jquery可以使javascrīpt代码与html代码分离,保持HTML的清洁,还可以很轻松地绑定事件,甚至你可以不知道“事件”这个名词。

代码
$(document).ready(function(){
$("#clear").click(
function(){
alert("i am about to clear the table");
}
);
$("form[0]").submit(validate);
});
function validate(){
//do some form validation
}
[编辑本段]五,同一函数实现get\set
代码
$("#msg").html();
$("#msg").html("hello");
上面两行代码,调用了同样的函数。

但结果却差别很大。

第一行是返回指定元素的HTML值,第二行则是将hello这串字符设置到指定元素中。

jquery的函数大部分有这样的特性。

[编辑本段]六,ajax
这是一个ajax横行的时代。

多少人,了不了解ajax的都跟着用上一把。

呵。

使用jquery实现ajax同样简单异常
代码
$.get("search.do",{id:1},rend);
function rend(xml){
alert(xml);
} (1)
$.post("search.do",{id:1},rend);
function rend(xml){。

相关文档
最新文档