我想运行一个使用Python win32com将IRibbonControl作为参数的vba宏。
例如,我的vba sub看起来如下
__m256i
并且
然后Python使用win32com调用test sub。
我们应该把测试函数的参数放在什么位置?
Public Sub test(control As IRibbonControl)
blabla
End Sub
答案 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")