首页 > 解决方案 > 如何从 Python 运行 Excel VBA / 宏

问题描述

我正在尝试在 Spyder 中使用 python 3.7 在 xlsm 工作簿中运行 VBA 宏。此工作簿有两个工作表。

我目前运行的代码没有问题地运行并保存新文件,但是它没有像它应该那样触发 VBA。

我知道这个宏有效,因为如果我手动单击 Excel 中的按钮,它就可以正常工作。

有人可以帮忙吗?我检查了信任中心下的宏设置并启用了所有宏,所以我认为这不是权限问题,但我不是这台电脑的管理员。

代码如下:

import os
import win32com.client

xl = win32com.client.Dispatch("Excel.Application")
wb = xl.Workbooks.Open("Z:\FolderName\FolderName2\FileName.xlsm")
xl.Application.Run("MacroName")
wb.SaveAs("Z:\FolderName\FolderName2\FileName1.xlsm")
wb.Close()
xl.Quit()

标签: pythonexcelvbawin32com

解决方案


首先确保您在当前工作或用户/文档中有 All.xlsm 文件(有时它在 yourDocuments 目录中工作,有时不在,所以最好两者都有)

将您的宏名称与包含宏的文件名一起传递,您可以根据您的要求更改 ReadOnly 或 Savechanges 等参数

并确保在每次运行后删除 xl 对象

import win32com.client

xl =win32com.client.dynamic.Dispatch('Excel.Application')
xl.Workbooks.Open(Filename = XYZ.xls, ReadOnly= 1)
xl.Application.Run('All.xlsm!yourmacroname')
xl.Workbooks(1).Close(SaveChanges=1)
xl.Application.Quit()
del xl

推荐阅读