VBA中的CMS自动化在63次迭代后停止

VBA中的CMS自动化在63次迭代后停止,vba,automation,avaya,Vba,Automation,Avaya,我正在写一个自动化脚本,因为我需要在6个月的时间内每天运行一个关于16个独立剥离技能的报告。脚本运行正常,但有一个问题。它将运行63次迭代(即16=48+15=63时的3天)。在第15次循环(第63次整体迭代)之后,它将给出一个错误:“microsoft excel正在等待另一个应用程序完成OLE操作”。在我看来,我可能很容易出错,可能是因为我正在重载变量,也可能是因为没有完全关闭CMS端的某些内容。这是第63次迭代(64-1)这一事实似乎非常可疑,但我不确定就变量而言,我可能过载了什么。我没有

我正在写一个自动化脚本,因为我需要在6个月的时间内每天运行一个关于16个独立剥离技能的报告。脚本运行正常,但有一个问题。它将运行63次迭代(即16=48+15=63时的3天)。在第15次循环(第63次整体迭代)之后,它将给出一个错误:“microsoft excel正在等待另一个应用程序完成OLE操作”。在我看来,我可能很容易出错,可能是因为我正在重载变量,也可能是因为没有完全关闭CMS端的某些内容。这是第63次迭代(64-1)这一事实似乎非常可疑,但我不确定就变量而言,我可能过载了什么。我没有任何8位变量(除非我遗漏了什么)。此外,我应该指出,在运行宏之后,我可以手动重新登录CMS应用程序,而无需重新启动,因此我的直觉是,我没有完全关闭某些内容,并且CMS中允许的实例数量可能有限制。我包括了下面的脚本,除了技能的名称、服务器地址、用户名和密码由于安全原因被删除。任何帮助都将不胜感激

Public Sub Single_CMS_Report_Extract()

On Error Resume Next

' Add the files specified below to the References section:
' Tools -> References -> Browse to the CMS directory,
' e.g.: "C:\Program Files\Avaya\CMS Supervisor R14"
Dim cmsApplication As ACSUP.cvsApplication 'acsApp.exe
Dim cmsServer As ACSUPSRV.cvsServer 'acsSRV.exe
Dim cmsConnection As ACSCN.cvsConnection 'cvsconn.dll
Dim cmsCatalog As ACSCTLG.cvsCatalog 'cvsctlg.dll
Dim cmsReport As Object 'ACSREP.cvsReport 'acsRep.exe

Dim myLog As String, myPass As String, myServer As String
Dim reportPath As String, reportName As String, reportPrompt(1 To 2, 1 To 3) As String
Dim exportPath As String, exportName As String

Dim StartRunTime, EndRunTime As Date

Dim DayToRun, EndDate As Date
Dim Skill(1 To 16) As String

MsgBox ("Please ensure CMS open and logged in prior to continuing")
StartRunTime = Now

'Start Date
DayToRun = "12/16/2015"
'End Date
EndDate = "12/21/2015"



Skill(1) = "XXXXXXXX"
Skill(2) = "XXXXXXXX"
Skill(3) = "XXXXXXXX"
Skill(4) = "XXXXXXXX"
Skill(5) = "XXXXXXXX"
Skill(6) = "XXXXXXXX"
Skill(7) = "XXXXXXXX"
Skill(8) = "XXXXXXXX"
Skill(9) = "XXXXXXXX"
Skill(10) = "XXXXXXXX"
Skill(11) = "XXXXXXXX"
Skill(12) = "XXXXXXXX"
Skill(13) = "XXXXXXXX"
Skill(14) = "XXXXXXXX"
Skill(15) = "XXXXXXXX"
Skill(16) = "XXXXXXXX"

While DayToRun < (EndDate + 1)




    For i = 1 To 16

        ' Assigns Variables
        myLog = "myuser"
        myPass = "mypass"
        myServer = "xx.xx.xx.xx"
        'reportPath is the tab and "Category" that the report is found in Avaya
        reportPath = "Historical\Split/Skill\"
        reportName = "Summary Interval"

        'list of input names requested.....
        reportPrompt(1, 1) = "Split/Skill"
        reportPrompt(1, 2) = "Date"
        reportPrompt(1, 3) = "Times"

        'list of responses being used for input
        reportPrompt(2, 1) = Skill(i)
        reportPrompt(2, 2) = DayToRun
        reportPrompt(2, 3) = "00:00-23:30"

        'path and name of exported report file
        exportPath = "H:\Avaya data\"
        If i <> 5 Then
            exportName = Month(DayToRun) & "-" & Day(DayToRun) & "-" & Skill(i) & ".csv"
        Else
            exportName = Month(DayToRun) & "-" & Day(DayToRun) & "- DL-Toll Free" & ".csv"
        End If

        ' Open the CMS Application, launches acsApp.exe
        ' If a CMS Supervisor console is already open,
        ' the existing acsApp.exe is used.
        Set cmsApplication = CreateObject("ACSUP.cvsApplication")
        Set cmsServer = CreateObject("ACSUPSRV.cvsServer")
        Set cmsConnection = CreateObject("ACSCN.cvsConnection")
        cmsConnection.bAutoRetry = True

        ' Connetsc to the server, launches acsSRV.exe & ACSTrans.exe (2x)
        If cmsApplication.CreateServer(myLog, myPass, "", myServer, False, "ENU", cmsServer, cmsConnection) Then
        If cmsConnection.login(myLog, myPass, myServer, "ENU", "", False) Then
        End If
        End If

        ' Gets collection of Reports available on cmsServer
        Set cmsCatalog = cmsServer.Reports
        If cmsServer.Connected = False Then cmsServer.Reports.ACD = 1

        ' Sets parameters for report, launches ACSRep.exe (2x)
        cmsCatalog.CreateReport cmsCatalog.Reports.Item(reportPath & reportName), cmsReport



        If cmsReport.SetProperty(reportPrompt(1, 1), reportPrompt(2, 1)) And cmsReport.SetProperty(reportPrompt(1, 2), reportPrompt(2, 2)) And cmsReport.SetProperty(reportPrompt(1, 3), reportPrompt(2, 3)) Then
        End If

        ' Runs report and extracts results  --- the 44 is the field delimiter
        cmsReport.ExportData exportPath & exportName, 44, 0, False, False, True


        ' Kills active report & server
        If Not cmsServer.Interactive Then
        cmsServer.ActiveTasks.Remove cmsReport.TaskID
        cmsApplication.Servers.Remove cmsServer.ServerKey
        End If

        ' Logs out
        cmsReport.Quit
        cmsConnection.Logout
        cmsConnection.Disconnect
        cmsServer.Connected = False

        ' Releases objects
        Set cmsReport = Nothing
        Set cmsCatalog = Nothing
        Set cmsConnection = Nothing
        Set cmsServer = Nothing
        Set cmsApplication = Nothing


    Next
    i = Nothing
    DayToRun = DateAdd("d", 1, DayToRun)
    Wend

EndRunTime = Now
MsgBox ("Run-time = " & Minute(EndRunTime - StartRunTime) & ":" & Second(EndRunTime - StartRunTime))

End Sub
Public Sub-Single\u CMS\u Report\u Extract()
出错时继续下一步
'将下面指定的文件添加到引用部分:
'工具->参考->浏览到CMS目录,
例如:“C:\Program Files\Avaya\CMS Supervisor R14”
将cmsApplication设置为ACSUP.cvsApplication'acsApp.exe
将cmsServer设置为ACSUPSRV.cvsServer'acsSRV.exe
将cmsConnection作为ACSCN.cvsConnection“cvsconn.dll”进行调整
将cmsCatalog的尺寸标注为ACSCTLG.cvsCatalog'cvsctlg.dll
Dim CMS报告为对象“ACSREP.cvsReport”ACSREP.exe
Dim myLog作为字符串、myPass作为字符串、myServer作为字符串
Dim reportPath作为字符串,reportName作为字符串,reportPrompt(1到2,1到3)作为字符串
Dim exportPath为字符串,exportName为字符串
Dim StartRunTime,EndRunTime作为日期
Dim DayToRun,EndDate作为日期
变暗技能(1到16)作为字符串
MsgBox(“继续之前,请确保CMS已打开并登录”)
StartRunTime=现在
“开始日期
DayToRun=“12/16/2015”
'结束日期
EndDate=“12/21/2015”
技能(1)=“XXXXXXXX”
技能(2)=“XXXXXXXX”
技能(3)=“XXXXXXXX”
技能(4)=“XXXXXXXX”
技能(5)=“XXXXXXXX”
技能(6)=“XXXXXXXX”
技能(7)=“XXXXXXXX”
技能(8)=“XXXXXXXX”
技能(9)=“XXXXXXXX”
技能(10)=“XXXXXXXX”
技能(11)=“XXXXXXXX”
技能(12)=“XXXXXXXX”
技能(13)=“XXXXXXXX”
技能(14)=“XXXXXXXX”
技能(15)=“XXXXXXXX”
技能(16)=“XXXXXXXX”
而DayToRun<(结束日期+1)
对于i=1到16
'指定变量
myLog=“myuser”
myPass=“myPass”
myServer=“xx.xx.xx.xx”
'reportPath是报告在Avaya中找到的选项卡和“类别”
reportPath=“历史\分割/技能”
reportName=“摘要间隔”
'请求的输入名称列表。。。。。
reportPrompt(1,1)=“分割/技能”
reportPrompt(1,2)=“日期”
reportPrompt(1,3)=“次”
'用于输入的响应列表
报告提示(2,1)=技能(i)
reportPrompt(2,2)=DayToRun
报告提示(2,3)=“00:00-23:30”
'导出报告文件的路径和名称
exportPath=“H:\Avaya数据”
如果我5岁
exportName=月(日)和“-”日(日)和“-”技能(i)和“.csv”
其他的
exportName=月(DayToRun)和“-”日(DayToRun)和“-DL免费”和“.csv”
如果结束
'打开CMS应用程序,启动acsApp.exe
'如果CMS监控控制台已打开,
'使用现有的acsApp.exe。
设置cmsApplication=CreateObject(“ACSUP.cvsApplication”)
设置cmsServer=CreateObject(“ACSUPSRV.cvsServer”)
设置cmsConnection=CreateObject(“ACSCN.cvsConnection”)
cmsConnection.bAutoRetry=True
'连接到服务器,启动acsSRV.exe和ACSTrans.exe(2x)
如果cmsApplication.CreateServer(myLog,myPass,“,myServer,False,“ENU”,cmsServer,cmsConnection),则
如果是cmsConnection.login(myLog、myPass、myServer,“ENU”、“False”),则
如果结束
如果结束
'获取cmsServer上可用的报告集合
设置cmsCatalog=cmsServer.Reports
如果cmsServer.Connected=False,则cmsServer.Reports.ACD=1
'设置报告的参数,启动ACSRep.exe(2x)
cmsCatalog.CreateReport cmsCatalog.Reports.Item(报告路径和报告名称),cmsReport
如果cmsReport.SetProperty(reportPrompt(1,1)、reportPrompt(2,1))和cmsReport.SetProperty(reportPrompt(1,2)、reportPrompt(2,2))以及cmsReport.SetProperty(reportPrompt(1,3)、reportPrompt(2,3)),则
如果结束
'运行报告并提取结果---44是字段分隔符
cmsReport.ExportData导出路径和导出名称,44,0,False,False,True
'终止活动报表和服务器(&S)
如果不是cmsServer.Interactive,则
cmsServer.ActiveTasks.Remove cmsReport.TaskID
cmsApplication.Servers.Remove cmsServer.ServerKey
如果结束
“注销
CMS报告,退出
CMS连接。注销
CMS连接。断开连接
cmsServer.Connected=False
'释放对象
设置cmsReport=Nothing
设置cmsCatalog=Nothing
设置cmsConnection=Nothing
设置cmsServer=Nothing
设置cmsApplication=Nothing
下一个
i=没有
DayToRun=DateAdd(“d”,1,DayToRun)
温德
EndRunTime=Now
MsgBox(“运行时间=&Minute(EndRunTime-StartRunTime)&”:“&Second(EndRunTime-StartRunTime))
端接头

我还没有真正解决这个问题。到目前为止,我一直在努力解决这个问题,但我真的希望有一个更持久的解决方案。我发现,如果我运行3天的价值或报告,退出Excel并退出Avaya,然后重新打开Avaya,重新登录,然后重新打开Excel,我可以一遍又一遍地重复这个过程。不过,这并不是我想要的。