RPA俱乐部

 找回密码
 立即注册
查看: 1037|回复: 1

在 UiPath 中运行 VBA(上)

[复制链接]

9

主题

17

帖子

86

积分

注册会员

Rank: 2

积分
86
发表于 2018-11-28 16:33 | 显示全部楼层 |阅读模式
在UiPath 中运行 VBA(上)
1. 在 UiPath 中调用 Excel 的功能

UiPath 中提供了两组 Activities 来实现 Excel 的数据操作。遗憾的是,这两组 Activities 包含的操作都是一些很简单,很基本的操作,只能调用非常有限的 Excel 功能,它们甚至不能对Excel 常用的数据透视表等重要功能进行操作。
关于两组实现 Excel 数据操作 Activites 的更多细节,请阅读我之前在简书发布的文章。我的简含有许多UiPath 方面的学习资源,主页地址为https://www.jianshu.com/u/6c397612e7c2
image001.png
UiPath 自带 操作 Excel 的 Activities
然而,我们的业务逻辑往往没有像单纯读写 Excel 单元格那么简单,有可能复杂到 Excel 自带功能都无法覆盖的情况。在 Excel 里,微软设计了 VBA 功能来应对这种情况,使你可以按照自己的意愿灵活调用、扩展 Excel 自带的功能。
UiPath 操作 Excel 的时候,也有类似的问题:UiPath 官方提供的操作方法有限无法满足日常需要。值得庆幸的是,UiPath似乎也意识到了这一点。它除了提供了对 Excel 基本操作的 Activites , 还预留了两个可以让你编写脚本来扩展 Excel 相关 Acticities 功能的 Activities:Executemacro 和 Invoke VBA 。
就像 Excel VBA 可以在Excel 执行一样,它们可以在 UiPath 的工作流中执行 Excel VBA 脚本。这是一个很了不起的功能,意味着你可以在 UiPath 工作流中访问 Excel 的对象模型,获得 Excel 全部能力,实现对 Excel 各方面的控制。
换句话说,如果你编写的 VBA 脚本足够好的话,可以在UiPath 里面调用 Excel 的所有功能。你再也不必被那几个自带的 Excel 相关 Activity 束缚住了手脚!。


2. Execute macro 和 Invoke VBA 应知应会
Execute macro 和 Invoke VBA 这两个 Activity 之间其实是有一些不同的。它们的特性对比如下:
Invoke VBA
Invoke VBA 执行工作簿外部的 VBA 脚本。
VBA 脚本是使用单独的 .bas 文件存储起来的,UiPath 做了以下的事情:
1. 往目标工作簿插入 .bas 文件
2. 将其命名与调用的文件一致
3. 复制文件上的所有内容到 .bas 文件
4. 执行指定的 Sub
5. 移除 .bas 文件
从上面的清单中可知,Invoke VBA 相当于临时性地插入了 .bas 文件,执行完成之后又把插入的 .bas 文件删除了。因此, .bas 文件最终不会被存储在工作簿里。
这个特性使得本来不能携带 VBA 代码的 .xlsx 类型的工作簿也可以执行 VBA 脚本了。而事实也证明,如果要在不能携带 VBA 代码的工作簿类型执行VBA 代码,只能使用这个 Activity 了。
不同于 .xlsx 类型的工作簿, .xlsm 类型的工作簿可以存储 VBA 脚本,当然也可以使用 InvokeVBA 。在这种情况下带来的好处是:VBA 脚本代码和工作簿是分离的,VBA 脚本只有一个副本,更加方便编程人员控制VBA 脚本的版本。


Invoke VBA 例子
下面我们来创建一个例子来看看 Invoke VBA  的基本用法
1. 新建一个 Excel 工作簿,并将其命名为 UiPath Excel VBA(Invoke VBA).xlsx
2. 打开工作簿,然后 F12 打开 VBE
3. 在 VBA工程中插入一个 VBA 模块,将其命名为 CodeOutsideWookBook
4. 在模块中插入以下 VBA 脚本:
Public Sub MacroOutsideWookBook()
   MsgBox "Hello there, I am saying Hello outside theWookbook!"
End Sub
image003.png
此是VBA 窗口

5. 将模块导出为 CodeOutsideWookBook.bas 文件
6. 将工作簿保存为 .xlsx类型的工作簿,然后关闭工作簿
7. 在 UiPath Studio 中创建如下图所示的流程 :
注意Excel application scope 中文件路径指向刚才的工作簿,而 Invoke
VBA 中分别输入.bas 文件路径和刚才创建的宏名 MacroOutsideWookBook
image005.png
8. 在 UiPath 中点击 F5 按键运行流程图,得到如下结果:
image007.png
这意味着 UiPath 正确地执行了刚才创建的 VBA 脚本,得到了预期的效果。


Execute macro
Execute macro 执行工作簿内的Macro。
UiPath 执行存储在工作簿内的 VBA 脚本,就好像我们在 Excel 操作界面上运行宏一样。Execute macro 不会对工作簿内的 VBA 脚本做任何的更改,它要求工作簿内必须定义了相应的宏,适用于 .xlsm 类型的工作簿。
Execute macro 例子
让我们创建一个例子来了解 Execute macro 的基本用法
1. 新建一个 Excel 工作簿,并将其命名为 UiPath Excel VBA(Execute Macro).xlsm
2. 打开工作簿,然后 F12 打开 VBE
3. 在 VBE 中插入一个 VBA 模块,将其命名为 CodeInsideWookBook
4. 在模块中插入以下 VBA 脚本
Option Explicit
Public Sub MacroInsideWookBook()
     MsgBox "Hello there, I am saying Hello insidethe Wookbook!"
End Sub
image009.png
此时 VBE 窗口
5. 将工作簿保存为 .xlsm 类型的工作簿,然后关闭工作簿
6. 在 UiPath Studio 中创建如下的流程。
注意Excel application scope 中文件路径指向刚才的工作簿,而 Execute Macro 中分别输入宏名 MacroInsideWookBook
image011.png
7. 在 UiPath 中点击 F5 按键运行流程图,得到如下结果:
image013.png
UiPath 执行了工作簿内的宏,并得到了预期的结果。

回复

使用道具 举报

2

主题

13

帖子

106

积分

注册会员

Rank: 2

积分
106
发表于 2018-11-28 20:37 | 显示全部楼层
又学到了新的技术,EXCEL操作更强大了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

手机版|小黑屋|RPA俱乐部 ( 闽ICP备15006840号-20 )

GMT+8, 2019-1-24 04:08 , Processed in 0.049578 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表