Автоматизация CMS в VBA останавливается после 63 итераций

Я пишу сценарий автоматизации, так как мне нужно составлять отчет по 16 отдельным навыкам разделения в день в течение 6 месяцев. Скрипт работает, с одной проблемой. Будет выполнено 63 итерации (т.е. 3 дня при 16 = 48 + 15 = 63). После 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

0 ответов

Другие вопросы по тегам