Я работал над автоматизацией некоторых задач по составлению отчетов на своей работе, и я использовал Selenium с Python для работы в Интернете, а затем передавал данные в Excel, а затем запускал VBA-макрос в этой электронной таблице, чтобы организовать данные так, как это нужно.Мне это нужно.
Я знаю, что VBA может использовать Selenium, и я знаю, что Python может редактировать таблицы Excel, но я считаю, что они лучше всего подходят для задач, которые я им даю.
У меня были небольшие проблемы с их интеграцией, когда Python просто вызывал макрос, и тогда его работа была завершена.Однако в этот раз я пытаюсь передать определенные переменные в макрос.
Я буду использовать скобки для представления конфиденциальной информации, хотя это, вероятно, плохо, потому что в коде, конечно, используются скобки, но не волнуйтесьв моем коде нет скобок.
Вот код, который запускает макрос:
if os.path.exists(r"PATH.xlsm"):
thisxl = wincl.Dispatch("Excel.Application")
wby = thisxl.Workbooks.Open(os.path.abspath(r"PATH.xlsm"))
thisxl.Application.Run("MODULE", [STRING_VARIABLE], [STRING VARIABLE], [INTEGER VARIABLE], [INTEGER VARIABLE])
wby.Close(SaveChanges=1)
thisxl.Quit()
del thisxl
Теперь, если я просто запускаю этот код, он прекрасно запускает макрос.Единственная проблема заключается в том, что одной из этих переменных является код, который помогает сопоставить определенные составляющие элементы данных с информацией, полученной из Интернета.Другими словами, представьте себе, что в моем наборе данных есть несколько имен, представляющих людей, и некоторые из них совпадают - код гарантирует, что макрос распознает уникальных людей.
Но когда я пытаюсь сопоставить кодыничего не соответствует.И поэтому я попытался убедиться, что Excel и Python знают, что эти коды являются целыми числами.
Когда я передаю переменные из python в VBA, я пробовал int([CODE])
, а затем добавил [CODE] As Integer
к частифункции VBA, в которой передаются переменные.
Это вызывает ошибку:
File "<COMObject <unknown>>", line 14, in Run
File "C:\Program Files (x86)\Python37-32\lib\site-packages\win32com\client\dynamic.py", line 287, in _ApplyTypes_
result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147352566), None)
Очевидно, что это какая-то ошибка типа TypeError, но я не уверен, почему, если я 'мы удостоверились, чтобы соответствовать типам.У Python и VBA разные определения целых чисел?Возможно, я просто неправильно сопоставляю типы.
Кроме того, в качестве теста я передал MsgBoxed переданный код (до того, как попытался передать его как целое число) и код в том виде, в котором он находится в документе Excel, иэто был дисплей:

Итак, цифры действительно совпадают, это просто проблема с типом или форматированием.Любая помощь будет оценена!