Python com错误(-2147352562:'参数数量无效。\ r \ n')

时间:2016-09-26 17:18:18

标签: python vba ms-access macros win32com

我正在通过许多网站挖掘帮助。我似乎没有问题的解决方案。所以我再问一遍。

我试图调用需要三个参数的(公共)函数。我看到我成功连接到访问

中的数据库
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),无)

0 个答案:

没有答案