VBA的未来

img

"Visual" 指的是开发图形用户界面 (GUI) 的方法- - 不需编写大量代码去描述界面元素的外观和位置, 而只要把预先建立的对象add到屏幕上的一点即可. "Basic"指的是 BASIC (Beginners All-Purpose Symbolic Instruction Code) 语言, 是一种在计算技术发展历史上应用得最为广泛的语言.

Visual Basic源自于BASIC编程语言. VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统, 可以轻易的使用DAO, RDO, ADO连接数据库, 或者轻松的创建Active X控件, 用于高效生成类型安全和面向对象的应用程序 . 程序员可以轻松的使用VB提供的组件快速建立一个应用程序.

借用现在流行术语, VBA的这些特性是否可以叫: 低代码?

一. 前言

Since its inception, Microsoft Excel has changed how people organize, analyze, and visualize their data, providing a basis for decision-making for the millions of people who use it each day. Today we’re announcing a significant evolution in the analytical capabilities available within Excel by releasing a Public Preview of Python in Excel. Python in Excel makes it possible to natively combine Python and Excel analytics within the same workbook - with no setup required. With Python in Excel, you can type Python directly into a cell, the Python calculations run in the Microsoft Cloud, and your results are returned to the worksheet, including plots and visualizations.

最近微软在office上有重大的更新, 宣布在excel(office 365, insider)引入Python, Announcing Python in Excel (microsoft.com), 当然这不是和excel完全整合, 类似于VBA的脚本语言, 而是调用运行在微软云服务上的Python, 作为微软产品"AI"化的重要一步.

在各种神魔乱舞的营销词汇充斥的数据处理领域, 数据处理/office自动化的老兵vba显得尤为冷寂, 今年刚好是vba发布的30周年(1993, vba的第一个版本发布, ms excel 5.0)What's the history of Visual_Basic_for_Applications? (yearis.com).

关于vba的命运的讨论, 在vb7被微软放弃就开始讨论, 在vba6.5/7(office 2010)发布之后, 更是将之视作微软彻底停止vba开发的标志, Microsoft: VBA's Demise 'Greatly Exaggerated' -- Visual Studio Magazine.

但是在微软的产品支持寿命安排上, 作为"古老化石"的vba却从未上榜过, 每次的office大版本的发布, 相关的新api依然在继续着更新, 尽管微软不在语言层面对vba进行新的功能更新, 只是修复一些大的语言层bug.

随着时间的推移, 关于VBA的命运的讨论众说纷纭:

Which language is more likely to succeed VBA: Python or JavaScript? - Quora

What's the future of VBA? : r/vba (reddit.com)

Future of (Excel) VBA (Macros)? - Microsoft Community

The future of VBA in Microsoft’s vision - Microsoft Community Hub

从微软的各种文档, 博客上, 微软在彻底终止vba这个问题上从未有明显的时间表, 和IE还是有明显的差异对待, IE的死刑来得极快, 但是微软在对待vba上, 却是相当保守, Microsoft to block Office VBA macros by default - The Verge, 2022年7月微软试图大范围限制vba使用, 但是很快马上又认怂Microsoft reinstates Office macros | PCWorld.

Microsoft’s new security banner.

二. VBA简介

vba, visual basic for application

简而言之, vba就是vb语言针对特定的程序(application)开发的语言, 主要用于该特定程序的自动化执行和辅助.

这里的application并不限于office全家桶, 其他的产品如, adobe acrobat pdf处理程序, 电路图绘制的pads都支持vba, VBA - 2016 - SOLIDWORKS Help等(As of July 1, 2007, Microsoft no longer offers VBA distribution licenses to new customers).

for application, 意味着使用vba写的程序, 无法单独运行, 必须依托于其依赖的载体程序的环境.

2.1 vba还值得学吗?

Will VBA Die in 2022? Is It Worth Learning? Inside Scoop_thespreadsheetguru.com

回答这个问题之前需要知道优劣和自身的使用场景(毕竟没有垃圾的产品, 只有垃圾的定价).

vba语言的优势

  • 简单, 可以使用录制宏自动生成代码, 更快投入生产实践.(假如你是个对代码很生疏的新手, 可以尝试使用python对excel的文档进行精确的格式调控, 需要花费的时间).
  • 图形界面, 所见即所得.
  • 开箱即用, 不需要配置复杂的运行环境.
  • 和office无缝连接(vba支持的程序并不限于office, 如adobe的pdf处理软件Acrobat, 绘制电路图的pads等)
  • 无需复杂的计算机相关知识.

vba语言的劣势

  • 语言已经不再更新, 作为vba的父项目的VB6, 已经早就废弃, 作为远亲的VB.net也彻底退出历史舞台. 微软已经对VBA的维护状态已经处于半废弃的状态, 微软自VBE7发布之后(其中引入一个重要的数据支持, longlong类型(长整型的扩展版本), 以更好的支持更大的数值), 已经没有在这上投入更多的资源.
    • 作为集成开发环境的VBE也没有更新, 连基本的排版, 代码提示也不支持.(严重影响开发的效率)
    • bug修复慢, 在2011年就出现的, 针对某些日文和中文的异常bug, 该问题在10年后才修复.
    • 基础数据载体不支持, 如json不原生支持, 这意味着开发的成本极高.
    • 随着依赖的系统组件的淘汰, 如IE, 依赖于其解析xml, html将成为大问题.
    • 语法和其他新生代语言差异较大
  • 适用范围非常有限, 除了office之外, 其他的一些曾今使用vba作为脚本语言的大型程序都在逐步使用其他的语言作为代替, 如Adobe Acrobat, 虽然还支持vba, 但是已经在开发文档上已经缺少支持, 该软件也使用JavaScript将作为主要脚本语言.
  • 开发者正在消逝, 问题的解决方案的提供者不断减少(缺乏生态的支持).
  • 各种资料正在不断从网络环境中消失.(特别是作为资料来源的vb论坛, 大多已经关闭)

简而言之, 在特定的环境, 如下, vba依然能够很好的胜任其中的绝大部分的任务(但是开发的效率未必高).

  • 高频的office使用, 如各种会计事务所, 电子商务, 物流等对电子表格有着深度依赖的公司, 不需要实现太过复杂的编程目的, 只是希望优化excel/office为核心的作业流程.(对于新手不要被忽悠去学所谓的python来操作office, 例如操作文档的各种格式, 排版, 图表创建等, 其学习成本和收益是不成正比的(操作这些内容是极其繁琐无意义的代码), 甚至巨亏, 这些操作在vba上通过录制宏可以解决绝大部分的问题.)

  • 非专业的编程人员.

  • 编程的启蒙语言.

但是不宜过度深入去钻研vba, 例如各种dll调用, 控件的属性, 方法等, 不值得花费过多的时间在这些方面.

三. 继任者

img

在讨论vba的继任者之前, 先看看excel中的外部扩展(脚本)的实现方式有哪些

  • 加载项, 即新增的以JavaScript为基础实现的add-in.
  • excel加载项, 传统加载项(如xlam文件实现的加载)
  • com加载项, 传统加载项(如adobe的pdf转换插件)
显示不同 Office 扩展性解决方案的重点区域的四象限关系图. Office Web 外接程序以及 COM 和 VSTO 加载项面向专业开发人员, 而 VBA 则面向最终用户. Office Web 外接程序侧重于跨平台体验和协作, 而 COM 和 VSTO 加载项和 VBA 则适合个人在 Windows 上的体验.

(图: 各种方式之间的差异)

office2021上, 只支持其中的三种, 其中的新增的Office Scripts documentation - Office Scripts | Microsoft Learn并没有提供.

很多培训机构都曾大肆宣扬微软将使用python将取代vba成为下一代的office的脚本语言, 这个谣言的根源多来源于一次微软社区搞得关于vba替代者的的投票活动, 这个内容现在已经无法看到, 其内容大致是调查, pythonoffice的用户/开发者中的流行程度, 更多内容见, Microsoft Considers Adding Python as an Official Scripting Language to Excel (bleepingcomputer.com).

微软官方人员的回复关于这个问题, The future of VBA in Microsoft’s vision - Microsoft Community Hub

‎Oct 17 2019 09:15 AM

Hi there, we plan to continue to ensure VBA (along with COM and XLLs) continues to be supported and remains current and continues to remain working and healthy. This will continue in future versions of Office. As we look ahead, our team is also investing in ensuring Javascript add-ins and custom functions as they can run across where Excel runs across Mac, Online, Windows... Also, we're continue to explore new scenarios such as enabling Python scripting in Excel.

作者的身份:

I'm a PM on the Office Platform team, focused on all things Excel. I love spreadsheets and am amazed at all the cool things users and developers have been able to do!

python的确在数据处理上有着非常大的优势, 特别是庞大的生态圈的支持下, 那怕作为传统数据处理的R语言还是Matlab现在都不可避免受到python的极大冲击.

3.1 为什么会是JavaScript?

需要注意的是, 作为office的竞争者的wps, 也已经在其最新版本的wps中引入了基于JavaScript的脚本语言, 以替代其从微软购买的vba.

这个问题先得回到vba的身上, 这个替代语言必须满足一个大前提: 简单易用.

可以对比一下pythonvba在使用流程

vba

  1. 安装office
  2. 设置中, 将vbe选项提取到主界面
  3. 打开vbe, 编写代码, 更简单的, 使用录制宏, 生成代码, 运行
  4. 分享代码, 只需要保存为xlsm/xla宏文件即可.

python

  • 安装python? 安装那个版本? 还是各种集成的包? 这些集成包又是什么意思?, python2.7和3.0二者的差异是?
  • 安装好之后, 如何配置环境, 什么叫环境? 什么是虚拟环境? pip是什么?
  • IDE选哪个? vscode是什么? pycharm是什么?
  • anaconda是什么? pandas是什么, numpy是什么?
  • ..................
  • 代码如何在其他的计算机上运行....代码要怎么打包, 怎么编译...?

微软对于下一代的语言的若干要求, 必然也是满足vba的基础, 例如易用, 减少现有的vba的/开发者向新的语言转型的难度, 同时需要满足新的要求.

  • 跨平台(特别是在移动端上的使用, 可以在不管是Android, iOS等上都可以运行, 不会存在需要不同平台的代码需要复杂转换的问题).
  • 语言的侵权风险(不能像Android使用Java引发的系列知识产权争端的法律问题)
  • 技术风险, 语言最好是微软可控的(JavaScript的超集typescript是微软所完全掌控的), 或者不是单一公司所主导的语言.
  • 应用和推广, 最好是现成的语言, 有着现成庞大的开发者(不需要从基础一步步培养基础人才).
  • 开发者能够从中更容易获利(对于技术和产品的推广, 这一点无容置疑).
  • 入门门槛低.

JavaScript基本上完美满足上述的要求, 跨平台是JavaScript与生俱来的, 极其庞大的开发者(JavaScript常年霸榜各大语言榜单最多开发者的头名)可以作为生态的保障, 容易上手, 甚至可视为最简单的语言之一等, 诸多的优点让JavaScript成为越来越多的大型软件的脚本语言的首先.

作为JavaScript的近亲的electron框架正在成为桌面端开发的重要势力一样, 跨平台是现在各种语言博弈的关键一环.

(JavaScript是非常值得非专业编程者学习的一门语言, 简单易用, 适用场景非常广)

3.1.1 Office Scripts

img

Office Scripts in Excel let you automate your day-to-day tasks. Use the Action Recorder to turn manual steps into reusable scripts. Edit those scripts or create new ones with the Code Editor. Let others in the workbook run these scripts with a single button. Then, share them with coworkers so everyone can improve their workflow.

This series of documents teaches you how to use these tools. You'll find a wealth of samples covering different Excel scenarios. Use the tutorials to introduce yourself to the Action Recorder and Code Editor. These provide step-by-step guidance on how to record your frequent Excel actions, edit those scripts, and create new scripts from scratch.

微软在2020年发布office scripts预览版Announcing Office Scripts (Preview) - Microsoft Community Hub, 比较可惜的是到目前为止, 该特性依然只是对office 365开放.(wps 2021年发布的js宏)

Requirements

To use Office Scripts, you'll need the following.

  1. Excel for Windows (version 2210 or higher), Excel for Mac, or Excel on the web.
  1. OneDrive for Business.
  2. Any commercial or educational Microsoft 365 license with access to the Microsoft 365 Office desktop apps, such as:
  • Office 365 Business
  • Office 365 Business Premium
  • Office 365 ProPlus
  • Office 365 ProPlus for Devices
  • Office 365 Enterprise E3
  • Office 365 Enterprise E5
  • Office 365 A3
  • Office 365 A5
Excel on the web Excel for Windows Excel for Mac Excel for iOS Other Office products Power Automate
Office Scripts Yes Yes Yes No No Yes
Office Scripts Action Recorder Yes Yes Yes No No No
VBA macros No Yes Yes No Yes No
Office Add-ins Yes Yes Yes Yes Yes No
COM Add-ins No Yes Yes No Yes No
[Power Automate | Microsoft Power Platform](https://powerautomate.microsoft.com/zh-cn/)

借助 Microsoft Power Automate 简化重复性任务和业务流程,提高效率并降低成本,实现工作事半功倍。

关于vbaoffice scripts之间的一些差异体验见: Why Office Scripts Won't Replace VBA - YouTube.

3.1.2 Office Add-ins

可以使用 Office 外接程序平台来生成解决方案, 通过解决方案扩展 Office 应用程序, 并与 Office 文档中的内容进行交互. 借助 Office 外接程序, 可以使用熟悉的 Web 技术( 如 HTML, CSS 和 JavaScript) 来扩展 Outlook, Excel, Word, PowerPoint, OneNote 和 Project 并与之交互. 你的解决方案可以在 Office 中跨多个平台( 包括 Windows, Mac, iPad 和浏览器) 运行.

相较于使用 VBA, COM 或 VSTO 生成的加载项, Office 加载项提供以下优势.

  • 跨平台支持: Office 加载项在 Office web 版, Windows, Mac 和 iPad 中运行.
  • 集中部署和分发: 管理员可以跨组织集中部署 Office 加载项.
  • 通过 AppSource 轻松访问: 可以通过将解决方案提交到 AppSource, 使其可供广大受众使用.
  • 基于标准 Web 技术: 可以使用任何喜欢的库来生成 Office 加载项.

img

通过这种方式, 可以较好解决开发者的变现问题(code to money, 艰难的一环).

四. 小结

img

(图示: 图形化的上限, 常见的各种ERP, BI, 过多的功能设置, 让这些软件的使用门槛极高, 前期需要大量的培训投入, 围绕ERP实施的企业信息化, 失败是非常常见的现象.)

img

(图: 为一个客户所在公司的ERP截图, 该司为传统生产型企业(上市企业).)

office自动化, 依然是商业领域的绝对刚需, 在没有较好的过渡的前提下, 微软想让VBA顺利退出历史的舞台不是一件短时间(最起码在可预见的时间里)容易完成的事.