xlwings:无法通过xlwings功能区导入功能UDF

问题描述

我正在尝试通过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团队提供的链接可以帮助我解决问题。

需要确保启用了对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 代码为例。