#python-3.x #vba #xlwings
#python-3.x #vba #xlwings
Вопрос:
Я пытаюсь импортировать пользовательскую функцию (UDF) через xlwings, но сталкиваюсь с проблемой. При нажатии кнопки импорта функций на xlwings ribbon я получаю следующую ошибку во время выполнения:
`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
Файл .py, содержащий UDF, сохраняется в той же папке, что и вызывающая рабочая книга .xlsm.
Как мне исправить это, чтобы я мог использовать UDFS?
Комментарии:
1. вы используете это на компьютере с Windows?
Ответ №1:
Спасибо команде xlwings за предоставление ссылки, которая помогла мне решить проблему.
Необходимо убедиться, что включен доверительный доступ к объектной модели VBA.
Смотрите:https://docs.xlwings.org/en/stable/udfs.html#one-time-excel-preparations
Ответ №2:
Если у вас есть доверенный доступ к объектной модели VBA и вы получаете ошибку типа, есть дополнительный ответ, который применим к обеим версиям 0.22.2 и 0.22.3 и, возможно, более ранним.
В файловой библиотеке> Site-Packages>xlwings>udfs.py в строке 651 или 652 (в зависимости от версии) вставьте «.Item», где показано следующее:
xl_workbook.VBProject.VBComponents.Remove(xl_workbook.VBProject.VBComponents.Item("xlwings_udfs"))
Я не знаю, почему это работает, но это так. Исходная строка работает в VBA только с изменениями, которые применяются к синтаксису VBA и ссылке на книгу. (т. Е. Смотрите код VBA в вопросе для примера.