有时候,我们可能想要从Python运行Excel VBA宏,特别是当想要运行已有的Excel宏时,这很有用——甚至可以在不打开Excel文件的情况下执行这些VBA宏。
库
这里将使用py32win库进行演示。注意,要安装py32win库,在命令提示符下键入以下命令:
pip install pywin32
然而,要在Python中导入该库,则其名字成为win32com.client:
import win32com.client
Excel VBA宏
下面是一个非常简单的Excel VBA宏,它接受一个参数,在工作表Sheet1的单元格B2中输入一条问候语。当然,可以创建任何宏并使用Python运行它。
代码语言:javascript复制Sub mymacro(name As String)
Worksheets("Sheet1").Range("B2").Value = "你好," & name & "!"
End Sub
从Python中运行VBA宏
现在,将编写Python代码,从导入win32com.client开始,并实例化一个“xl”对象来表示Microsoft Excel应用程序。
然后,打开这个包含VBA宏的Excel文件,并将其赋给变量wb。
代码语言:javascript复制import win32com.client
xl =win32com.client.Dispatch("Excel.Application") #实例化Excel应用程序
wb =xl.Workbooks.Open(r'D:testpythonrunvba.xlsm')
xl.Application.Run('pythonrunvba.xlsm!模块1.mymacro("完美Excel")')
wb.Save()
xl.Application.Quit()
为了调用VBA宏,使用了xl.Application.Run()方法,其中的参数指示要运行的宏:
xl.Application.Run('pythonrunvba.xlsm!模块1.mymacro("完美Excel")')
其中:
1.pythonrunvba.xlsm!:包含VBA的文件,这里不需要包括完整路径。
2.模块1:包含宏的模块名。
3.mymacro("完美Excel"):宏名,注意到这里传递参数到VBA。
如果VBA宏不接受任何参数,只需包括宏名而无须括号,例如:
xl.Application.Run('pythonrunvba.xlsm!模块1.mymacro')
接下来,使用wb.Save()保存这个Excel文件,也可以选择使用VBA代码来保存这个工作簿。
最后,不要忘了调用xl.Application.Quit()关闭Excel应用程序。让Excel应用程序在后台打开可能会在以后导致程序出现问题。
欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。