微软|微软低头,让Office更好用的VBA宏不再默认禁用了

微软|微软低头,让Office更好用的VBA宏不再默认禁用了

文章图片

微软|微软低头,让Office更好用的VBA宏不再默认禁用了

文章图片

微软|微软低头,让Office更好用的VBA宏不再默认禁用了

文章图片


微软的Office全家桶毫无疑问是目前为止办公领域应用最为广泛的软件 , 同时也是职场人最为熟悉的“武器” , 因此也使得Office的“风吹草动”也受到了外界的众多关注 。 而此前在今年年初 , Offce生态迎来了一次巨大的变化 , 当时微软方面宣布为了打击勒索软件及其他恶意软件 , 将默认禁止Office从外部获取的VBA宏 。



彼时微软方面表示 , 这一变化将适用于从互联网上下载并包含VBA宏的Office文件 , 其中包括Access、Excel、PowerPoint、Visio和Word五款软件 , 并会自6月开始向Microsoft Office2013以上版本的所有用户推出 。 在启用VBA宏自动屏蔽的Office版本上 , 用户会看到“微软已阻止宏运行 , 因为此文件的来源不受信任”的安全警告 。
但就在半年后 , 微软却“后悔”了 。 日前微软方面表示 , 根据用户反馈、将取消这一改动 , 不再禁用Office的VBA宏 。
要知道当初宣布将默认禁止VBA宏时 , 微软首席项目经理Kellie Eickmeyer是这样说的 , 用户只要点击一个按钮就能执行宏 , 黑客则经常会发送内置宏的Office文件给用户 , 而在不经意激活宏后 , 系统就会被加载各种恶意内容 。



其实 , VBA也就是Visual Basic for Applications , 是微软方面在1993年基于可视化程序设计语言Visual Basic打造的宏语言 。 但VBA与传统的宏语言不同 , 传统的宏语言不具备高级语言的特征 , 没有面向对象的程序设计概念和方法 , 而VBA则提供了面向对象的程序设计方法 , 并提供了完整的程序设计语言机制 。
一直以来 , 在程序员社区里关于编程语言谁更优秀的争论 , 就从未没有停止过 , 诸如“PHP是最好的编程语言”、“千年的编程 , 万年的C”这类也十分常见 , 不过要说到最不受程序员欢迎的编程语言 , 则或许莫过于微软的VisualBasic 。 没错 , 无论是被吐槽为难以阅读、维护的Perl , 还是功能丰富到混乱的C++ , 都没有VisualBasic更让程序员反感 。 而在1998年微软方面不再为VisualBasic提供正式支持后 , VBA就取代了VB , 成为当下程序员最讨厌的编程语言了 。



程序员们讨厌VBA是因为它太简单 , 你没看错 , VBA的使用门槛低正是它被厌恶的原因 。 VBA作为VB的子集 , 延续了后者“所见即所得”的开发环境 , 同时 , VBA采用了解释机制 , 而且提供了强大的逐句解释功能 , 所以运行时不需要编译和链接 。 这意味着 , 不需要经过专业化的计算机科学学习 , 只有一定的逻辑思维能力和对编程有一些认识 , 几天之后就能写出一个像模像样的VBA程序 。



不需要高深的编程知识和专业的程序员 , 每个人都可以写VBA代码 , 这在上世纪90年代到本世纪初无疑是一个非常有吸引力的特质 。 然而 , 这也代表了一直到今天为止 , 许多公司使用的VBA程序依然是由二三十年前的非程序员写的 。 在今天的程序员来说 , VBA这种非现代编程语言自然是备受嫌弃了 。
更为重要的是 , VBA的安全性也很糟糕 。 所谓“宏” , 指的是用户对规则或模式进行预定义的一系列具体操作 , VBA宏的特质就是开启后 , 会高效地进行大批量处理程序编写者预先定义的命令 , 即便VBA宏包含宏病毒等恶意程序也会自动执行 。 为了避免这类情况 , 微软在Office套件的安全级别选项卡中 , 就提供了宏安全性的设置 。



但问题是 , 由于微软的设计导致了如果宏安全性太高 , 就会无法运行VBA代码 。 通常 , 网络中的各种教程都会推荐用户将宏安全性设置为“中”或者“低” , 而不是“高”和“非常高” 。 但用户如果为了方便而降低安全性 , 就给了宏病毒一展身手的机会 。 尽管对此微软方面并非无动于衷 , 也提供了查毒器来为用户提供检查VBA宏是否安全 , 但由于Office用户的特质 , 就决定了这一努力几乎是无谓的 。
最终 , 微软选择了直接禁用VBA宏这样一刀切的做法 。 然而VBA宏能够经历二十余年技术迭代的洗礼 , 靠的就是自身是Office生态中实现办公自动化的唯一工具 。 VBA宏可以减少Office中很多重复性的工作 , 甚至于完成Office自身功能无法实现的复杂任务 。 比如批量排版Word/PPT文件、从Word文档中抽取关键信息、实现自动批量打印、抓取网页数据 , 以及对接外部数据库等等 。