目录
0 前言
1 VBA 内容
1.1 EXCEL这边VBA的内容
1.2 VBA的测试代码
2 python 调用
2.1 python 调用VBA的过程和结果
2.2 代码
0 前言
前面写了这么多,没想到,其实py是可以直接支持VBA的
python的模块import xlwings,可以让python直接调用EXCEL工作簿文件里的VBA脚本
具体步骤如下
1 VBA 内容
1.1 EXCEL这边VBA的内容
试验环境:C:\Users\Administrator\Desktop\1001.xlsm,这个文件里包含这样一个VBA程序
VBA程序:放在测试EXCEL文件的模块里,写一个函数fuction如下
1.2 VBA的测试代码
Function test1901(a, b)
Debug.Print "1901"
test1901 = a * b
End Function
2 python 调用
2.1 python 调用VBA的过程和结果
- 需要 import xlwings
- 利用 wb = app.books.open() 打开EXCEL文件
app = xw.App(visible=True,add_book=False)
# 设置测试文件的路径
wb = app.books.open(r'C:\Users\Administrator\Desktop\1001.xlsm')
- 直接调用EXCEL内的函数,使用 wb.macro() 函数即可,
- 函数本身需要在EXCEL文件内
- EXCEL文件可以不是打开状态
- 副作用就是,如果EXCEL文件本身处于打开状态,PY会再打开一个这个文件的副本--只读副本
- 再就是,因为每次调用都需要执行打开EXCEL文件的操作,有点卡有点慢
- 如果是同时打开多个EXCEL文件不敢想象
2.2 代码
import xlwings as xw
app = xw.App(visible=True,add_book=False)
# 设置测试文件的路径
wb = app.books.open(r'C:\Users\Administrator\Desktop\1001.xlsm')
# 调用VBA脚本
test1901 = wb.macro('test1901')
test1901(4, 5)
print(test1901(4, 5))