此问题与我之前在此处提出的问题有关:Python code for running ms-Access Module Subroutine
为了解释我的问题,我将简要描述我想要做的事情:
我使用python和tkinter创建了一个GUI,让用户可以选择不同的搜索标准,然后将这些标准打印到.txt文件中。然后,python代码使用以下代码启动Access实例:
objAccess = win32com.client.Dispatch("Access.application")
objAccess.Visible = True
objAccess.OpenCurrentDatabase(filepath)
objAccess.DoCmd.RunMacro("Macro1")
宏是一个简单的“RunCode”命令,其函数名称为My_Function()。 My_Function()读取.txt文件,对数据库执行查询,生成报告并将报告以pdf格式保存在当前文件夹中,然后使用以下命令关闭Access:
DoCmd.Quit
我很确定这一切都按预期工作,直到我将文件(python脚本和Access数据库)移动到新文件夹。移动后,一切都像以前一样运行,即Access打开一个窗口,根据用户输入生成报告,然后关闭。但不像之前我移动文件,python控制台(我使用Spyder与Python 2.7)报告以下异常:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1532, in __call__
return self.func(*args)
File "C:/Users/nx71/ProsjektreferanserPython/Test_final/GUI_02_norsk.py",
line 269, in buttonclick2
objAccess.DoCmd.RunMacro("Macro1")
File "<COMObject <unknown>>", line 3, in RunMacro
com_error: (-2147352567, 'Exception occurred.', (0, None, u'The | action was canceled.
', None, -1, -2146825787), None)
此外,在运行脚本后,我无法通过双击图标打开任何Access数据库,除非我进入任务管理器,选择单个Access后台进程和“结束任务”。
简而言之:脚本+宏+函数执行我想要它做的事情,但在我移动文件后,控制台报告异常并且Access bacground进程徘徊并阻止我打开新的Access实例。
Ps:我正在使用Windows 10和MS Office 2013。
任何帮助将不胜感激!
答案 0 :(得分:0)
感谢DanL,您的评论。它让我走上正轨。我认为这个问题是由于VBA函数使用DoCmd.Quit关闭Access而objAccess在python脚本中仍处于“活动状态”(原谅我缺乏适当的术语,因为我对编程很新)。
从VBA函数的末尾删除DoCmd.Quit并在python代码中的RunMacro之后添加objAccess.Quit(),而不是给我所需的结果。
在我移动文件之前,我开始怀疑它是否正常工作。
再次感谢DanL。