MDB/ACCDB用python脚本执行宏/函数(带参数)

2024-04-25 00:38:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用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

但我得到一个错误:

^{pr2}$

然后我尝试另一种方法,调用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的功能和代码:

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

谢谢


Tags: run代码innoneaccessapplicationlinemerge