问题描述
我正在尝试通过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 代码为例。