【python VS vba】(3) 在python直接调用vba脚本

目录

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如下

【python VS vba】(3) 在python直接调用vba脚本_第1张图片

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文件可以不是打开状态

【python VS vba】(3) 在python直接调用vba脚本_第2张图片

  • 副作用就是,如果EXCEL文件本身处于打开状态,PY会再打开一个这个文件的副本--只读副本
  • 再就是,因为每次调用都需要执行打开EXCEL文件的操作,有点卡有点慢
  • 如果是同时打开多个EXCEL文件不敢想象

【python VS vba】(3) 在python直接调用vba脚本_第3张图片

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))

你可能感兴趣的:(python,开发语言)