随着工作越来越需要同事间的协同,不少工作文档都存储在云端。传统的VBA在跨软件自动化方面显得力有不逮。面对众多RPA竞争对手,Microsoft也推出了自己的产品Power Automate,实现云端和本地流程自动化,并引入了Automate Ribbon,用来弥补VBA的不足。我们可以在Excel上找到它,并点击New Script来编写代码:

Office Script 的底层语言是TypeScript,因此在语法上和VBA稍微有点差别。下面我们来看下在Office Script中的for..loop如何写,并将其和VBA的for...loop进行比较。
在for loop中,我们有对象的循环,如我们需要对工作簿中的每一个工作表进行循环操作,或者对单元格区域的每一个单元格进行循环。另一种是数值的循环,如从0开始,逐次加1,循环至9(注意,Office Script延续了大部分编程语言的特性,它是以0作为起始点(0 based),而VBA一般是以1作为起始点进行循环)。
我们先来看对象循环,以工作表作为对象,在Office Script是这样写的。
function main(workbook: ExcelScript.Workbook) {//get the worksheets collectionlet sheets = workbook.getWorksheets();//loop through each worksheet and print its namefor (let sheet of sheets) {console.log(sheet.getName());}}
可以看到我们有三个工作表,它们的名字分别为AA、BB和CC。在右侧的结果输出区域,我们看到结果和预期完全一致。

我们来对比下VBA。我们打开VBA编辑器,输入以下代码:
Sub ListAllSheets()Dim ws As Worksheet'loop through each worksheet and print its nameFor Each ws In ActiveWorkbook.WorksheetsDebug.Print ws.NameNext wsEnd Sub
我们可以在立即窗口,看到同样的结果。从这个本地的操作例子来看,VBA并不逊色于Office Script,甚至可能优于Office Script,因为Office Script没有办法像VBA那样通过MsgBox进行输出结果。

夜雨聆风