作者:南吕
关键词:表格宏、vba
在日常工作中,Excel表格数据处理是一个很常见的任务。而有些繁琐的操作手动实现非常费时,例如跨表格复制、粘贴和格式化。因此,使用VBA宏可以大大提高工作效率。
以下介绍如何用影刀调用Excel宏,包括两种实现思路:
(1)导入必要的模块:使用Python中的win32包,首先需要导入必要模块:win32com.client。
import win32com.client as win32
(2)打开Excel文件:使用win32包中的Dispatch方法,创建Excel应用程序对象,打开指定的Excel工作簿。
# 创建Excel应用程序对象
excel = win32.Dispatch('Excel.Application')
excel.Visible = True
# 打开Excel工作簿
workbook = excel.Workbooks.Open('file_path')
(3)设置VBA代码:在ActiveWorkbook中添加一个VBA模块,设置VBA模块的名称为'MyMacro',添加VBA代码到模块中。
# 在ActiveWorkbook中添加一个VBA模块
vba_module = workbook.VBProject.VBComponents.Add(1)
# 设置VBA模块的名称为'MyMacro'
vba_module.Name = 'MyMacro'
# 添加VBA代码到模块中
vba_code='Sub myMacro()\nMsgBox "Hello World!"\nEnd Sub'
vba_module.CodeModule.AddFromString(vba_code)
(4)运行宏
workbook.Application.Run('MyMacro.myMacro')
(5)关闭Excel应用程序
# 保存并关闭工作簿
workbook.Save()
workbook.Close()
# 退出Excel应用程序
excel.Application.Quit()
使用影刀官方指令【运行Excel宏】,可调用已经存在的宏。具体实现方式包括三种情况:调用当前工作簿保存的宏、调用个人宏工作簿保存的宏和调用其他表格保存的宏。需要注意的是,xlsx文件无法保存宏。
(1)调用当前工作簿保存的宏
影刀中启动需要执行宏的Excel文件,【运行Excel宏】中‘宏名称’:模块名.宏名,无需添加文件名称。
(2)调用个人宏工作簿保存的宏
手动打开Excel文件时,保存在XLStart文件夹的个人宏工作簿文件会在Excel启动的时候都会自动打开。使用影刀指令【启动Excel】打开Excel文件则需要另外打开。
个人宏工作簿文件路径:打开‘显示隐藏文件’,在文件路径:%appdata%/Microsoft/Excel/XLSTART/,复制文件‘PERSONAL.XLSB(2007版本)/Personal.xls(2003版本)’的路径,如:C:\Users\***\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB
影刀中启动个人宏工作簿文件和需要执行宏的Excel文件,【运行Excel宏】中‘宏名称’:PERSONAL.XLSB!模块名.宏名。

(3)调用其他表格保存的宏
影刀中启动保存宏的Excel文件和需要执行宏的Excel文件,【运行Excel宏】中‘宏名称’:'文件名.xlsm'!模块名.宏名。
其中,'文件名.xlsm'是含有VBA宏代码的Excel文件名,'模块名.宏名'是执行的VBA宏名称。如果需要传递参数,可以在宏的名称后面加上括号并在其中输入参数内容。
报错信息1:(-2147352567, '发生意外。', (0, 'Microsoft Excel', '无法运行“***”宏。可能是因为该宏在此工作簿中不可用,或者所有的宏都被禁用。', 'xlmain11.chm', 0, -2146827284), None)
解决方法:
报错信息2: (-2147352567, '发生意外。', (0, 'Microsoft Excel', '不信任到 Visual Basic Project 的程序连接\n', 'xlmain11.chm', 0, -2146827284), None)
解决方案:
这个错误通常是因为Microsoft Excel的安全设置不允许程序向其VBA项目中添加代码。
在菜单栏中选择“文件” > “选项” > “信任中心” > “信任中心设置” > “宏设置”,启用“启用所有宏”和“受信任的程序的访问到 VBA 项目对象模型”选项。
Excel宏的拓展阅读:https://www.w3cschool.cn/excelvba/excelvba-working.html