VBA宏与js宏的区别,异同


一、 JSAPI接口的差异

1. 方法的差异

(1) vb的方法可以不加括号,但jsapi中所有的方法都需要加括号,如果方法不加括号会被js语法判定为属性。

vb:复制
Application.Workbooks(1).Close
js:复制
Application.Workbooks.Item(1).Close()

(2) vb的方法支持给部分参数赋值。但js对缺省的参数需要用undefined占位补齐,如下面例子中为Find方法的第一和第三个参数赋值,在js中Find方法第二个参数需要用undefined占位补齐

vb:复制
Range("A1:N29").Find("香港特别", LookIn:=xlValues).Select
js:复制
Application.ActiveSheet.Range("A1:N29").Find("我",undefined, xlValues).Select();

(3) vb可通过数组方式取集合中的对象,jsapi必须通过Item方法获取集合中的对象,其中要注意二维数组取值时需要将value要改成Value2

vb:复制
Application.Workbooks(1).Close
js:复制
Application.Workbooks.Item(1).Close()

//以下是二维数组的取值方法

vb:复制
cells(2,3).value
js:复制
Application.Cells.Item(2,3).Value2

2. 属性的差异

(1) vb中调用书写错误的属性会报错,js不会报错,这是一个bug,所以特别注意。

js:复制
Application.ActiveDocument.Name111 不报错

(2) vb支持thisdocument对象,jsapi暂时不支持该对象,如果遇到thisdocument对象,可以用ActiveDocument代替

vb:复制
MsgBox (Application.ThisDocument.Name)
js:复制
MsgBox (Application.ActiveDocument.Name)

3. 事件的差异

jside的导航栏展示和自动补全的事件比较少,但js支持的事件基本和vb一致,下面给出一个vb事件转换为jside中事件的例子

vb:复制
Private Sub Workbook_SheetSelectionChange(ByVal Target As Range)
Dim i As Integer
IF Target.Column>6 And Target.Column>37 && Target.Row>6 And Target.Row Mod 2 = 1 And Cells(Target.Row -1, 5).Value <> “”
ThenWith Target.Validation.Delete.Add Tpye:=xlValidateList,AlertStyle:=xlValidAlertStop,Operator:=xlBetween,Formular1:="=区域城市!$A2:$A30000").IncellDropdown = true
js:复制
function Workbook_SheetSelectionChange(Sh, Target) {if(Target.Column>6 && Target.Column>37 && Target.Row>6 && (Target.Row)%2n==1 && Cells.Item(Target.Row -1n, 5).Value2 !==””) {var temptarget = Target.Validationtemptarget.Delete()temptarget.Add(xlValidateList,xlValidAlertStop,xlBetween,"=区域城市!$A2:$A30000")temptarget.IncellDropdown = true}
}

(2) vb支持thisdocument对象,jsapi暂时不支持该对象,如果遇到thisdocument对象,可以用ActiveDocument代替

vb:复制
MsgBox (Application.ThisDocument.Name)
js:复制
MsgBox (Application.ActiveDocument.Name)

二、函数定义

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

vb:复制
Dim i As Integer
js:复制
var i
vb:复制
Dim j As String
js:复制
var j

2. 基本类型对比

js类型 vb类型
boolean Boolean
number Integer,Long,LongLong,Single,Double
string String

3.vb的bool类型首字母大写,js中都是小写

vb:复制
True, False
js:复制
true, false

4.字符串

js字符串使用反斜杠“\”转义字符把特殊字符转换为字符串字符:

代码 结果 描述
\' ' 单引号
\" " 双引号
\\ \ 反斜杠

因此,在常见的文件路径的场景,需要采用“/”或者“\\”(Windows)来作为路径分隔符:

js:打开文档
复制
function test()
{Workbooks.Open("H:\\新建文件夹\\工作簿1.xlsx")
}

四、运算符

1. 算术运算符的差异,如vb中的mod关键字应改为%

vb:复制
Target.Row Mod 2 = 1
js:复制
(Target.Row)%2==1

2. “+”可以用来拼接字符串

vb:复制
AddIns.Add FileName:="C:\Program Files\Microsoft Office" _"\Templates\Letters Faxes\MyFax.dot", Install:=True
js:复制
AddIns.Add("C:/Program Files/Microsoft Office" + "/Templates/Letters Faxes/MyFax.dot",true)

3. 逻辑运算符

vb:复制
1.逻辑与(AND)2.逻辑或(OR) 3.逻辑非(<>)
js:复制
逻辑与(&&)2.逻辑或(||) 3.逻辑非(!)

注意js和vb判断空的逻辑不一样,vb内部会智能一点,遇到判断空的语句,尽量用"!"

vb:复制
if Cells(1,2).value == ""  //空
js:复制
if (Cells.Item(1,2).Value2)   //空
vb:复制
if Cells(1,2).value <> ""  //非空
js:复制
if (!Cells.Item(1,2).Value2)  //非空

五、枚举

vb和js枚举的使用上存在的差异如下,在vb中wdAlignParagraphLeft和WdParagraphAlignment.wdAlignParagraphLeft语法都正确,但在js中只有wdAlignParagraphLeft是正确用法

vb:复制
//vb用以上两种方式的枚举都可以正常使用
Application.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
Application.Selection.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft
js:复制
//js只支持这一种
Application.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft

六、With关键字

vb有with关键字,js没有该关键字,转换时可以将with后面的对象赋值给一个变量,例子如下

vb:复制
With Selection.Range.PageSetup.TextColumns.SetCount NumColumns:=2.EvenlySpaced = 0
End With
js:复制
Var columens = Selection.Range.PageSetup.TextColumns
columens.SetCount(2)
columens.EvenlySpaced = 0
//注意TextColumns后面没有括号因为这是一个属性

七、 条件语句

VB中的常用条件语句{IF 条件 Then 表达式 Endif},在JS中应该转换为 if(条件) {表达式}

vb:复制
IF Target.Column>6 And Target.Column>37 And Target.Row>6 And Target.Row Mod 2 = 1 And Cells(Target.Row -1, 5).Value <> ""
ThenWith Target.Validation.Delete.Add
Endif
js:复制
if(Target.Column > 6 && Target.Column > 37 && Target.Row > 6 && (Target.Row) % 2 == 1 && Cells.Item(Target.Row -1n, 5).Value2 !== null) {var temptarget = Target.Validationtemptarget.Delete()temptarget.Add(xlValidateList,xlValidAlertStop,xlBetween,"=区域城市!$A2:$A30000")
}

八、 路径

VB中的常用条件语句{IF 条件 Then 表达式 Endif},在JS中应该转换为 if(条件) {表达式}

vb:复制
IF Target.Column>6 And Target.Column>37 And Target.Row>6 And Target.Row Mod 2 = 1 And Cells(Target.Row -1, 5).Value <> ""
ThenWith Target.Validation.Delete.Add
Endif
js:复制
if(Target.Column > 6 && Target.Column > 37 && Target.Row > 6 && (Target.Row) % 2 == 1 && Cells.Item(Target.Row -1n, 5).Value2 !== null) {var temptarget = Target.Validationtemptarget.Delete()temptarget.Add(xlValidateList,xlValidAlertStop,xlBetween,"=区域城市!$A2:$A30000")
}
            </body>

wps中VBA宏与js宏的区别相关推荐

  1. wps宏编辑器-js宏录制运行

    WPS开放平台如下描述JS宏录制和运行. WPS宏编辑器提供了一个自动生成JS代码的功能,即录制宏.录制宏功能通过宏录制器捕捉用户与WPS交互的操作,并以JS代码的形式记录下来,整个过程是自动的,不需 ...

  2. WPS中VBA控制word时出现调用错误

    WPS中VBA控制word时出现调用错误 背景, 在WPS的环境下, 我的WORD自动填写软件出错, 主要怀疑: 如果没有WORD文件被打开的状态下 如果最后一个文件被关掉, 与EXCEL不同, 这时 ...

  3. wps宏编程js宏编辑器之代码调试讲解

    继前几篇wps js宏编程基础知识,wps开放平台就js宏编辑器的介绍说明,es6基本语法讲解后,相信大家对wps js宏编程有了一定认识,已经会用js在wps表格中实现一些简单的功能,编写js宏代码 ...

  4. WPS JS宏批量重命名文件名

    工具软件:WPS JS宏编辑器 代码实现: 一.读取文件名模块 1.定义当前工作薄路径为当前工作路径 var pah=ThisWorkbook.Path; 2.获取当前文件名 var file=Dir ...

  5. wps js宏中使用Lodash

    文章目录 前提条件 使用 Lodash 源码 最好放在单独的模块中 使用 立即窗口测试 宏内测试 不理想的编程体验 Thu Jul 01 2021 01:38:12 GMT+0800 Lodash 只 ...

  6. 【WPS】WPS的JS宏脚本编写总结

    1 背景 使用WPS表格,需要删除偶数行数据. 如图,第3.4行和第5.6行中有合并的单元格,我要删除第4.6.8行,数据自动会落在剩下的行里. 2 代码 // 运行环境:WPS JS宏编辑器 // ...

  7. wps js宏写一个可以批量合并Excel文件表格数据的工具

    wps发布JS宏编辑器的功能已经很久了,今天尝试写了个非常简单的Excel表格合并的工具,发现真的是吊打VBA语言!就是有个小小的缺点:不支持外接程序和ActiveX控件,有点可惜,不过终于可以摆脱V ...

  8. wps js宏学习之旅

    软件:wps 功能:wps宏编辑器 目标:编写自动处理excel处理的JS宏 其他实现的方法有:VB环境编辑, python excel库实现,RPA机器人 1.JS宏所在位置:wps-开发工具-JS ...

  9. WPS JS宏表格定位实例

    工具软件:WPS JS宏编辑器 实例功能: 给你这样的功课表,将各位老师的功课定位到任课情况中去. 任课情况表: 本实例的定位要实现将功课表的各教师任教情况定位到表中,实现上有一定的难度. 代码实现思 ...

最新文章

  1. Flume的Collector
  2. Python--音频文件分类代码
  3. SAP 销售云支持的丰富的报表显示类型
  4. 设计模式第三集——装饰者模式(Decorator)
  5. t3s java_关于JAVA的this关键字
  6. ant java eclipse_Eclipse之ANT使用
  7. 2019.7.17东湖大数据页面二
  8. excel高级筛选怎么用_excel中使用高级筛选7个示例、多个条件、复制到另一个工作表公式...
  9. 安装与优化   98
  10. 飞桨PaddleHub带你环游世界,快来试试Python一键视频抠图吧
  11. html基础入门----简单动画
  12. 高斯过程回归(GPR)
  13. python处理grd格式文件_Surfer的grd文件格式说明
  14. Codeforces - 1102F - Elongated Matrix(建图 + 哈密顿通路)
  15. EndNote保姆级快速上手使用教程,小白必看!
  16. linux设置用户密码
  17. fna服务器未响应,服务器端口说明
  18. git命令 统计某成员/全部人员的代码提交量
  19. 带联网功能的RFID宿舍门禁(四)-NodeMCU网站与RC522共同控制舵机转动
  20. 网上搜索电子书的办法

热门文章

  1. bat操作批量去除文件名中的空格
  2. 专业卸载工具Uninstall Tool软件安装教程
  3. Spring拦截器(Interceptor)的运用
  4. 天气预报今天几点下雨_今天天气预报几点下雨
  5. 电脑怎么快捷复制粘贴发送?
  6. VScode 配置C/C++环境
  7. 可web管理的linux下载工具,2019年最受欢迎的5款Linux下载管理器
  8. 第二章 零差云控关节模组内部构造
  9. MySQL JBDC驱动下载安装
  10. 小米科技-瞿晋萍-米聊技术选型与架构