MDB / ACCDB通过python脚本执行宏/功能(带有参数)

时间:2018-08-11 14:59:15

标签: python ms-access

我想用python脚本执行宏/功能代码。我有以下代码示例:

from win32com.client import Dispatch
objAccess = Dispatch("Access.Application")
objAccess.Visible = False
objAccess.OpenCurrentDatabase(strDbName)
objDB = objAccess.CurrentDb()
objAccess.DoCmd.RunMacro('MyMacro')
objAccess.Application.CloseCurrentDatabase()
objAccess.Application.Quit()
del objAccess
del objDB

但是我得到这个错误:

Traceback (most recent call last):
File "D:\workspace-python\TOOLS\SHPTOOL\test.py", line 8, in <module>
objAccess.DoCmd.RunMacro('MyMacro')
File "<COMObject <unknown>>", line 3, in RunMacro
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, u"Microsoft Office Access can't find the object 'MyMacro.'", u'ACMAIN11.CHM', 10183, -2146825803), None)

然后我尝试另一种方法,调用RUN方法:

objAccess = Dispatch("Access.Application")
objAccess.Visible = False
objAccess.OpenCurrentDatabase(strDbName)
objDB = objAccess.CurrentDb()
objAccess.Run('merge', "mystringparameter")
objAccess.Application.Quit()

错误:

Traceback (most recent call last):
File "D:\workspace-python\TOOLS\SHPTOOL\test.py", line 58, in <module> objAccess.Run('merge', "mystringparameter")
File "<COMObject Access.Application>", line 14, in Run
File "C:\Python27\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, u"Microsoft Office Access can't find the procedure 'merge.'", None, -1, -2146825771), None)

还有我的MDB代码,这3个功能:

Sub merge(path As String)
    MsgBox "Inside generated macro!!! " & path
End Sub

Sub MyMacro()
    MsgBox "Inside generated macro!!!"
End Sub

Function MyFunction()
    MsgBox "You MUST select a Destination Folder!"
End Function

谢谢

1 个答案:

答案 0 :(得分:0)

只需替换

objAccess.DoCmd.RunMacro('MyMacro')

通过

objAccess.run('MyMacro')

\ o /