xlwings: не удается импортировать функции (UDFS) через ленту xlwings

#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 в вопросе для примера.