VBA的全称叫做Visual Basic for Application. 相当于在VB的基础上做了一点点的减法,比如说文件读取功能、标准库等。
可能会有各类用户看到这篇文章,在犹豫着是否该入门编写JS宏。
对于有VB(A)经验的,建议先看WPS开放平台 中的 从Visual Basic转到 JavaScript 一文。内置宏语言的区别,表面上来看,只影响了一些软件自动化的内容(过去一些VBA函数)。
对于刚刚下载了WPS,想要去学写宏代码,网上铺天盖地的还只是VBA资料,不禁要问,我该入WPS JS宏的坑吗?毕竟,JavaScipt不是微软钦定的宏内置语言。我觉得无妨尝鲜。理由如下:第一,VB已老,基本上失去了微软自己的支持。第二,尽管在宏方面微软没有亲自下场将JavaScript加入为内置宏语言,但是Office的加载项就支持通过JavaScript等web技术创建。第三,微软有个插件叫做Script Lab(属于微软的garage项目),也有跟JS宏类似的功能(但由于网络原因,似乎它跑不起来。 Script Lab链接)。第四,可以配合node.js,实现以node.js为核心的办公软件操作。这样就能在一定程度上弥补JS作为非官方内置宏语言的缺点。
同时JavaScript自身的缺点,也会带到写宏代码的过程中来。例如:
此外,官网上WPS的JS宏资料较少,文档版本管理很乱。很多功能还是在更新中,你甚至可能不知道你装的这个版本到底支持多少功能。这算是一个小公司的痛。所以很多时候,我宁愿先查VBA文档,如果有问题的,再对照下WPS自己的文档。
所谓的查VBA文档不是指查看VBA语言的详细情况,而是指看VBA如何与Excel交互,一图胜千言
注:比较下Excel Range的VBA表述和WPS表格中的Range,前者更详实。但如果照抄VBA代码会发现,WPS表格的Range对象没有Value的属性,只有一个叫做Value2的同类属性,而且它文档中的例子就是通篇Value2。
可能有用户不经意点进VBA Reference中的Statements或Functions中去,然后发现了一些宝藏。比如,像我一样偶然发现WPS中的JS宏支持Dir和GetAttr函数了,意味着用JS宏同样可以遍历文件了!
注:由于许多宏编程开发者都是非计算机科班出生,如果行文中硬把Statement翻译成语句其实理解起来怪怪的。简单来说,可以将其理解为一个vb中的过程(sub)或者其他语言中不返回值的函数。但在调用上,运行statement不用括号。
很多非必要的Statements表明了Basic这个上古语言的年纪。如果有Python2经历的同学可能会知道,在那个时候print也是一个statement而不是一个函数。看看里面的ChDir等等都是statement而不是function,这与现代一点的语言格格不入。
可能WPS会为了与VBA之间的兼容性,会持续增加相关函数,以此保持与VBA语言中的Statements和Functions一致性。但是,我稍微试用了下,坑还有很多。一个粗略的建议就是,能不用就不用。除非你清醒的知道后果是啥,否则就别用。(比如我用Dir和GetAttr实现文件夹遍历,是因为我还有一手准备,它出问题的时候,我就用Python遍历,然后生成JSON供WPS宏调用。)
不推荐使用的理由:首先,WPS的官方文档没有介绍,你不知道官方支持度。一家商业公司静悄悄退出一些功能,只能说明这本就不是受到重视的功能。其次,存在函数在不同的平台(可能也包括不同的版本)返回的值不一致的情形。最后,有些函数的设计其实过于古早,现在来看早就不合时宜了。比如Open不支持指定的编码,默认还在使用ANSI编码。
参考资料:
Getting started with VBA in Office 这个链接中,微软花了大力气说你为什么应该学习VBA。
上一篇
下一篇