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 代码。
我正在尝试通过 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 代码。