从Python中运行Excel VBA

2022-04-13 14:01:04 浏览数 (1)

有时候,我们可能想要从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应用程序在后台打开可能会在以后导致程序出现问题。

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

0 人点赞