Как передать значения как целые числа из Python в макрос VBA без ошибок? - PullRequest
0 голосов
/ 12 февраля 2019

Я работал над автоматизацией некоторых задач по составлению отчетов на своей работе, и я использовал 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, иэто был дисплей:

enter image description here

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

1 Ответ

0 голосов
/ 12 февраля 2019

@ xidgel Ответил правильно.Мне нужно было использовать тип данных Long для VBA, а не Integer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...