VBA宏与js宏的区别,异同
一、 JSAPI接口的差异
1. 方法的差异
(1) vb的方法可以不加括号,但jsapi中所有的方法都需要加括号,如果方法不加括号会被js语法判定为属性。
(2) vb的方法支持给部分参数赋值。但js对缺省的参数需要用undefined占位补齐,如下面例子中为Find方法的第一和第三个参数赋值,在js中Find方法第二个参数需要用undefined占位补齐
vb:复制 |
Range("A1:N29").Find("香港特别", LookIn:=xlValues).Select
|
js:复制 |
("A1:N29").Find("我",undefined, xlValues).Select();
|
(3) vb可通过数组方式取集合中的对象,jsapi必须通过Item方法获取集合中的对象,其中要注意二维数组取值时需要将value要改成Value2
//以下是二维数组的取值方法
2. 属性的差异
(1) vb中调用书写错误的属性会报错,js不会报错,这是一个bug,所以特别注意。
(2) vb支持thisdocument对象,jsapi暂时不支持该对象,如果遇到thisdocument对象,可以用ActiveDocument代替
3. 事件的差异
jside的导航栏展示和自动补全的事件比较少,但js支持的事件基本和vb一致,下面给出一个vb事件转换为jside中事件的例子
vb:复制 |
Private Sub Workbook_SheetSelectionChange(ByVal Target As Range)
Dim i As Integer
IF >6 And >37 && >6 And Mod 2 = 1 And Cells( -1, 5).Value <> “”
Then
With
.Delete
.Add Tpye:=xlValidateList,AlertStyle:=xlValidAlertStop,Operator:=xlBetween,Formular1:="=区域城市!$A2:$A30000")
.IncellDropdown = true
|
js:复制 |
function Workbook_SheetSelectionChange(Sh, Target) {
if(>6 && >37 && >6 && ()%2n==1 && ( -1n, 5).Value2 !==””) {
var temptarget =
()
(xlValidateList,xlValidAlertStop,xlBetween,"=区域城市!$A2:$A30000")
= true
}
}
|
(2) vb支持thisdocument对象,jsapi暂时不支持该对象,如果遇到thisdocument对象,可以用ActiveDocument代替
二、函数定义
1. vb用sub ... end sub关键字定义函数,js用funtion{}关键字定义函数
vb:复制 |
Public(Private) Sub AddTemplate()
MsgBox "d"
End Sub
|
js:复制 |
function AddTemplate() {
MsgBox("d")
}
|
三、数据类型
1. vb在数据定义时需要指明类型,但是js是动态类型,赋值后才有类型,js包括的基本类型:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol,声明这些类型都用关键字var
2. 基本类型对比
js类型 |
vb类型 |
boolean |
Boolean |
number |
Integer,Long,LongLong,Single,Double |
string |
String |
的bool类型首字母大写,js中都是小写
4.字符串
js字符串使用反斜杠“\”转义字符把特殊字符转换为字符串字符:
代码 |
结果 |
描述 |
\' |
' |
单引号 |
\" |
" |
双引号 |
\\ |
\ |
反斜杠 |
因此,在常见的文件路径的场景,需要采用“/”或者“\\”(Windows)来作为路径分隔符:
js:打开文档 复制
|
function test()
{
("H:\\新建文件夹\\工作簿")
}
|
四、运算符
1. 算术运算符的差异,如vb中的mod关键字应改为%
2. “+”可以用来拼接字符串
vb:复制 |
FileName:="C:\Program Files\Microsoft Office" _"\Templates\Letters Faxes\", Install:=True
|
js:复制 |
("C:/Program Files/Microsoft Office" + "/Templates/Letters Faxes/",true)
|
3. 逻辑运算符
vb:复制 |
1.逻辑与(AND)2.逻辑或(OR) 3.逻辑非(<>)
|
js:复制 |
逻辑与(&&)2.逻辑或(||) 3.逻辑非(!)
|
注意js和vb判断空的逻辑不一样,vb内部会智能一点,遇到判断空的语句,尽量用"!"
vb:复制 |
if Cells(1,2).value == "" //空
|
js:复制 |
if ((1,2).Value2) //空
|
vb:复制 |
if Cells(1,2).value <> "" //非空
|
js:复制 |
if (!(1,2).Value2) //非空
|
五、枚举
vb和js枚举的使用上存在的差异如下,在vb中wdAlignParagraphLeft和语法都正确,但在js中只有wdAlignParagraphLeft是正确用法
vb:复制 |
//vb用以上两种方式的枚举都可以正常使用
= wdAlignParagraphLeft
=
|
js:复制 |
//js只支持这一种
= wdAlignParagraphLeft
|
六、With关键字
vb有with关键字,js没有该关键字,转换时可以将with后面的对象赋值给一个变量,例子如下
vb:复制 |
With
.SetCount NumColumns:=2
.EvenlySpaced = 0
End With
|
js:复制 |
Var columens =
(2)
= 0
//注意TextColumns后面没有括号因为这是一个属性
|
七、 条件语句
VB中的常用条件语句{IF 条件 Then 表达式 Endif},在JS中应该转换为 if(条件) {表达式}
vb:复制 |
IF >6 And >37 And >6 And Mod 2 = 1 And Cells( -1, 5).Value <> ""
Then
With
.Delete
.Add
Endif
|
js:复制 |
if( > 6 && > 37 && > 6 && () % 2 == 1 && ( -1n, 5).Value2 !== null) {
var temptarget =
()
(xlValidateList,xlValidAlertStop,xlBetween,"=区域城市!$A2:$A30000")
}
|
八、 路径
VB中的常用条件语句{IF 条件 Then 表达式 Endif},在JS中应该转换为 if(条件) {表达式}
vb:复制 |
IF >6 And >37 And >6 And Mod 2 = 1 And Cells( -1, 5).Value <> ""
Then
With
.Delete
.Add
Endif
|
js:复制 |
if( > 6 && > 37 && > 6 && () % 2 == 1 && ( -1n, 5).Value2 !== null) {
var temptarget =
()
(xlValidateList,xlValidAlertStop,xlBetween,"=区域城市!$A2:$A30000")
}
|
</body>