我正在通过许多网站挖掘帮助。我似乎没有问题的解决方案。所以我再问一遍。
我试图调用需要三个参数的(公共)函数。我看到我成功连接到访问
中的数据库import win32com.client
acApp = win32com.client.Dispatch('Access.Application')
acApp.OpenCurrentDatabase('C:/Access_Databases/MyDatabase.accdb')
acApp.Run("MyProject.ImportingRoutine", Date, LocalPath, Adtnl)
在最后一行之后,我得到:
“result = self。 oleobj .InvokeTypes(*(dispid,LCID,wFlags,retType,argTypes)+ args) com_error:(-2147352567,'异常发生。',(0,无,无,无,0,-2147352562),无)“
注意:参数是格式为YYYYMMDD(int64)的日期,路径是本地存储库的字符串,“C:/ ...”,是使用“/”,VBA宏转换为“\” “如果需要,最后一个是布尔参数(但我为False和True提供0或-1)。如果我从vba-excel调用它,相同的代码工作得很好。
com错误-2147352562的参数数量不正确(为什么?)。 似乎Python无法使用参数运行Microsoft Access VBA宏(函数)。
我将在Python中编写VBA中宏执行的更新,但我想知道我是否做错了。
Public Function ImportingRoutine(ByVal InDate As Long, _
ByVal InPath As String, _
ByVal AddDate As Boolean) As Boolean
Dim FileExists As Boolean
Dim outIDAV As Variant
Dim lgSpcDt As Long
InPath = VBA.Replace(InPath, "/", "\")
outIDAV = ImportDailyAnalyticVector(InDate, InPath, , True, True, AddDate)
FileExists = outIDAV(1)
lgSpcDt = outIDAV(2)
If FileExists Then
Call ReadingFieldNames("tblDAVector", "tblMetDat_AVFields")
Call ChangeAllFieldsType("tblDAVector", "tblMetDat_AVFields", _
"NewName", "Type", "Order", "Size", "'*CSP','1ESP','1E'", _
"Vect_Date", lgSpcDt)
Call ClearingHist
Call AppendDAtoHist
End If
ImportingRoutine = FileExists
End Function
这是我正在打电话的功能。
其他功能的标题是:
Public Function ImportDailyAnalyticVector(ByVal DateDbl As Long, _
Path As String, _
Optional VectName As String = "VectorAnaliticoYYYYMMDD", _
Optional ByVal Zipped As Boolean = False, _
Optional ByVal Silent As Boolean = True, _
Optional ByVal AddDate As Boolean = False) As Variant
Public Function ReadingFieldNames(ByVal tblTarget As String, _
ByVal tblFieldNames As String)
Public Function ChangeAllFieldsType(tblTarget As String, _
tblAuxiliar As String, _
fldName As String, _
fldType As String, _
fldOrder As String, _
fldSize As String, _
Optional ExVT As Variant = "''", _
Optional NM_Bussiness_Dt As String = "Vect_Date", _
Optional New_Date As Long = 0)
最后两个函数是无参数的。最初,我设计了数据库,认为我最终会将其迁移到SAS系统。但鉴于我部门的预算很少,我决定在2月初学习Python。鉴于我在Python中发现的(意外)优势,我放弃了SAS选项。由于正在使用特殊字符,因此DB中的变量非常标准,只有下划线“_”。
顺便说一下,我做了以下功能:
Sub ss()
Call ImportingRoutine(20160908, _
"C:/Asset_Controlling/Repository/PIP/Vectores_Analiticos/2016/", 0)
End Sub
然后我试着打电话:
acApp.Run("MyProject.ss")
但是这个也会产生相同的com错误。很容易知道Python到达了VBA代码。如果我试着跑:
acApp.Run("MyProject.ss()")
新错误如下: com_error:(-2147352567,'异常发生。',(0,无,“Microsoft Access无法找到过程'MyProject.ss()。'”,无,-1,-2146825771),无)