为什么我的VBA功能没有正常关闭Access?

时间:2015-09-22 11:37:53

标签: python vba ms-access access-vba win32com

此问题与我之前在此处提出的问题有关: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。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

感谢DanL,您的评论。它让我走上正轨。我认为这个问题是由于VBA函数使用DoCmd.Quit关闭Access而objAccess在python脚本中仍处于“活动状态”(原谅我缺乏适当的术语,因为我对编程很新)。

从VBA函数的末尾删除DoCmd.Quit并在python代码中的RunMacro之后添加objAccess.Quit(),而不是给我所需的结果。

在我移动文件之前,我开始怀疑它是否正常工作。

再次感谢DanL。