Как вызвать функции MSAccess VBA и сабвуферы, используя Python? - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь автоматизировать Microsoft Access 2016 с помощью Python. Я использую пакет pywin32 из здесь . Это мой Python код:

import win32com.client

ac = win32com.client.Dispatch("Access.Application")
print(ac.Name)
print(ac.CurrentProject.Path)

print(ac.Run('test'))

и VBA:

Public Function Test() As String
  Test = "test123"
End Function

Доступ к Name и CurrentProject.Path работает нормально, но вызов Run завершается неудачно с :

Traceback (most recent call last):
  File ".\python_access\main.py", line 6, in <module>
    print(ac.Run('test'))
  File "<COMObject Access.Application>", line 8, in Run
  File "C:\Users\Gilbert\.virtualenvs\python_access-TxDlns7u\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, -2146771191), None)
PS C:\Users\Gilbert\development\python_access> pipenv run py .\python_access\main.py
Microsoft Access C:\X-Ware Limited\TaskList
Traceback (most recent call last):
  File ".\python_access\main.py", line 6, in <module>
    print(ac.Run('test'))
  File "<COMObject Access.Application>", line 8, in Run
  File "C:\Users\Gilbert\.virtualenvs\python_access-TxDlns7u\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, -2146771191), None)

Я видел предложенные здесь обходные пути: Python код для запуска подпрограммы модуля ms-Access , но в моем случае мне нужно передать параметры в функцию и прочитать возвращаемое значение, поэтому использование макроса не будет работать.

...