如何在excel之外执行vba宏

Kar*_*awy 4 python excel vba excel-vba

我有一个excel电子表格,其中包含大量的VBA和包含按钮的宏.

如何在Excel中执行VBA代码(特别是单击按钮并触发其onclick事件)来自python之外(例如)?

注意:我愿意用不同的语言来解答,比如C++,C#或Java; 但是,到目前为止,我更喜欢它们在python中,因为它可以更顺畅地连接到我的python应用程序的其余部分.

注2:我可能需要使用python excel库之一使用python来操作excel电子表格

版本号:

Microsoft Excel Office 365 Version 1708 Build 8431.2079
python 2.7
Run Code Online (Sandbox Code Playgroud)

jes*_*sse 5

您可以使用win32com库通过Python与COM对象进行交互.您可以使用pip安装win32com库.这就是我至少这样做的方式.实质上,您不是单击工作表上的按钮,而是调用嵌入在VBA代码中的子例程以在工作表上运行.

另外,我使用Python 3.6,但我相信Python 2.7应该是兼容的.这是一个基本的概述.

安装Win32Com

打开并命令提示符并键入:

pip install pypiwin32
Run Code Online (Sandbox Code Playgroud)

import win32com.client as win32

excel = win32.Dispatch("Excel.Application") # create an instance of Excel
#excel.Visible = 1 #Uncomment this to show Excel working through the code
book = excel.Workbooks.Open(Filename=r'C:\YourBookHere.xlsm')
excel.Run("YourBookHere.xlsm!Sheet1.MacroName") # This runs the macro that is on Sheet1
book.Save()
book.Close()
excel.Quit()
Run Code Online (Sandbox Code Playgroud)

希望这有帮助,这是我的第一篇文章.编辑:稍微清理一下


Xuk*_*rao 2

为了扩展 dylan 的出色答案:您也可以使用 pythonxlwings包完成相同的任务。本质上xlwings是一个奇特的包装器pywin32,允许使用更简单的语法控制 Excel 应用程序。以下 python 代码应该与 dylan 的答案中的代码执行相同的操作:

import xlwings as xw

# Connect to existing workbook containing VBA macro
wb = xw.Book(r'C:\YourBookHere.xlsm')

# Run the VBA macro named 'MacroName'
wb.macro('MacroName')()
Run Code Online (Sandbox Code Playgroud)