[英]Why doesn't my VBA function shut down Access properly?
這個問題與我在這里找到的上一個問題有關: 用於運行ms-Access模塊子例程的Python代碼
為了解釋我的問題,我將簡要說明我要做什么:
我使用python和tkinter制作了一個GUI,可以讓用戶選擇不同的搜索條件,然后將這些條件打印到.txt文件中。 然后,python代碼使用以下代碼啟動Access的實例:
objAccess = win32com.client.Dispatch("Access.application")
objAccess.Visible = True
objAccess.OpenCurrentDatabase(filepath)
objAccess.DoCmd.RunMacro("Macro1")
該宏是功能名稱為My_Function()的簡單“ RunCode”命令。 My_Function()讀取.txt文件,對數據庫執行查詢,生成報告,並將報告以pdf格式保存在當前文件夾中,然后使用以下命令關閉Access:
DoCmd.Quit
我很確定這一切都能按預期工作,直到將文件(python腳本和Access數據庫)移動到新文件夾。 移動之后,所有操作都像以前一樣運行,即Access打開一個窗口,根據用戶輸入生成報告,然后關閉。 但是與移動文件之前不同,python控制台(我在Python 2.7中使用Spyder)報告以下異常:
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的新實例。
附:我正在使用Windows 10和MS Office 2013。
任何幫助將不勝感激!
謝謝DanL的評論。 它使我走上了正確的軌道。 我認為問題是由VBA函數通過DoCmd.Quit關閉Access引起的,而objAccess在python腳本中仍處於“活動”狀態(原諒我缺乏適當的術語,因為我對編程非常陌生)。
從VBA函數的末尾刪除DoCmd.Quit並在python代碼中的RunMacro之后添加objAccess.Quit()可以給我所需的結果。
我開始懷疑在移動文件之前,它們是否都能正常工作。
再次感謝DanL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.