从Python调用Access子例程

Marco_sbt

我正在尝试从Python运行Access VBA中的一个子程序,但是看起来我遇到了一个我不太了解的问题。下面的代码可以正确打开数据库(访问),但无法运行VBA代码

import os, os.path
import win32com.client

ac = win32com.client.Dispatch("Access.Application")
ac.Visible=True
ac.OpenCurrentDatabase(os.path.abspath("C:\Database.accdb"))
ac.Application.Run("Database.accdb!module3.subpycall")

我正在调用的sub非常简单,它正在调用按钮的click事件。子代码可以在下面找到

Sub subpycall()
    Call cmdUniverse_Click
End Sub

当按照上面的代码运行python时,Access可以正确打开,主窗体可以正确打开,但是会返回以下错误。任何人都可以帮助解决此错误吗?

ac.Application.Run(“ Database.accdb!module3.subpycall”)中第7行的文件“ C:\ ON_CHAV.py”)运行文件“ C:\ Users \ PC”中第14行的文件“ <COMObject>” ApplyTypes结果= self中的\ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ win32com \ client \ dynamic.py“,第287行oleobj .InvokeTypes(*(dispid,LCID,wFlags,retType,argTypes)+ args)pywintypes.com_error:(-2147352567,'发生异常。',(0,无,“数据库找不到过程'Database.accdb!module3 .subpycall。'“,无,-1,-2146825771),无)

Suki Singh |

我之前已经通过VBS做到了这一点(不确定是否适合您),但这很简单,可以在Win TaskScheduler中进行安排。

Step1:
In your Access module1 (?), make your 'calling' proc 'public' and (not needed), qualify where the button on a form is:

Public Sub subpycall()
    Call Form_frmMain.cmdUniverse_Click
End Sub

Step2:
Create a VBS file and put this code in it.  Use the Access object to open your database, wait for it to load 60 secs, and then call the subpycall proc.  Save as eg, subpycall.vbs:

Dim accessApp
set accessApp = createObject("Access.Application") 
accessApp.OpenCurrentDataBase("C:\CHAV.accdb")
accessApp.Visible = True
accessApp.DoCmd.OpenForm "FrmMain"
WScript.Sleep 60000
accessApp.Run "subpycall"
accessApp.Quit
Set accessApp = Nothing

Step3:
Create a bat file and put these lines in and save as subpycall.bat :

@echo off
cscript "C:\subpycall.vbs"

Step 4 (optional):
Schedule the subpycall.bat

Hope this helps.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章