如何通过具有IRibbonControl作为参数的Python win32com运行vba宏

时间:2016-10-12 05:15:25

标签: python vba win32com

我想运行一个使用Python win32com将IRibbonControl作为参数的vba宏。

例如,我的vba sub看起来如下

__m256i

并且

然后Python使用win32com调用test sub。

我们应该把测试函数的参数放在什么位置?

Public Sub test(control As IRibbonControl)

    blabla

End Sub

2 个答案:

答案 0 :(得分:0)

你需要在python端实现IRibbonControl的对象,并将其作为参数传递回Excel。

我能想象的唯一方法是有意义的(但我有一个开放的心态)是你将COM加载项(https://support.microsoft.com/en-us/kb/291392)实现为IDTExensibility2。然后,您将被称为OnConnection方法(在您的python COM服务器中),它为您提供Excel应用程序对象。

从那里,您很可能获得对色带控件的引用。

我必须承认,到目前为止我没有设法让任何python COM Excel加载项自己工作,不过我试过了。

或者你能不能从sub中从excel应用程序中更好地获取IRibbonControl,并将其从参数列表中删除?

答案 1 :(得分:0)

通常,该参数是捕获从功能区传入的自定义功能区调用。 如果您使用的是Python,那么您将不使用Ribbon,然后可以绕过它,尽管它适用于我的情况,但也适用于所有用例。

Public Sub test(Optional control As IRibbonControl)

    blabla

End Sub

仅将参数用作可选参数可能会有所帮助。

import os
import win32com.client

from win32com.client import DispatchEx

xl = DispatchEx('Excel.Application')
xl.Workbooks.Open("myexcelfile.xlsm")

xl.Application.Run("test")