xlwings:无法通过 xlwings 功能区导入函数 (UDF)

xlwings: Unable to import functions (UDFs) via xlwings ribbon

我正在尝试通过 xlwings 导入用户定义的函数 (UDF),但遇到了问题。在 xlwings 功能区中按下 导入函数按钮 后,我收到以下 运行 时间错误:

`Run_time error '1004 

`Method of 'VBProject' of object '_Workbook' failed.'

根据 VBA 调试器,以下模块包含问题:

Sub ImportXlwingsUdfsModule(tf As String)
     ' Fallback: This is called from Python as direct pywin32 calls were 
     '  sometimes failing, see comments in the Python code
     On Error Resume Next
     ActiveWorkbook.VBProject.VBComponents.Remove 
     ActiveWorkbook.VBProject.VBComponents("xlwings_udfs")
     On Error GoTo 0
     **ActiveWorkbook.VBProject.VBComponents.Import tf**
End Sub

包含 UDF 的 .py 文件保存在与调用 .xlsm 工作簿相同的文件夹中。

如何纠正此问题以便我可以使用 UDF?

感谢 xlwings 团队提供 link 帮助我解决问题。

需要确保 信任访问 VBA 对象模型 已启用。

参见:https://docs.xlwings.org/en/stable/udfs.html#one-time-excel-preparations

如果您有对 VBA 对象模型的信任访问权限,并且收到 TypeError,则还有一个适用于版本 0.22.2 和 0.22.3 以及可能更早版本的附加答案。

在文件 Lib>Site-Packages>xlwings>udfs.py 的第 651 或 652 行(取决于版本)插入“.Item”,如下所示:

xl_workbook.VBProject.VBComponents.Remove(xl_workbook.VBProject.VBComponents.Item("xlwings_udfs"))

我不知道为什么会这样,但确实如此。原始行在 VBA 中确实有效,仅修改适用于 VBA 语法和工作簿参考。 (例如,请参阅问题中的 VBA 代码。