Макрос VBA-PCOMM работает в F8, но не в F5 - PullRequest
0 голосов
/ 30 мая 2018

Я работаю над макросами PCOMM-VBA уже пару месяцев.Эта проблема в основном происходит с каждым макросом, который я пишу.Хотя не во всех случаях, когда я пытаюсь запустить макрос.

, я весьма подозреваю, что источником проблемы является PCOMM, который не успевает за Excel, поэтому некоторые части кода будут пропущены.Однако, прочитав пару постов, я чувствую, что у Excel могут возникнуть проблемы с циклами и активными таблицами в моем коде.Я не уверен, что является причиной проблемы, но я надеюсь, что вы можете направить меня к ответу.

Цель макроса - обновить адрес электронной почты поставщиков.Чтобы выбрать поставщиков, я создал шаблон, который содержит код поставщика и пару дополнительных сведений вместе с адресом электронной почты, которые необходимо загрузить (4 столбца с простым .xls)

Поэтому будьте краткими: Когда я запускаю код в F8, код проходит без ошибок.Когда я пытаюсь запустить его в F5, компилятор пропускает некоторые строки и делает бесконечный цикл (так как запрошенные данные никогда не появятся в поле) или в худшем случае фактически обновляет его с неверными данными.

Вот фактический код:

Sub email_upload()

Dim appExcel As Excel.Application
Dim appWb As Excel.Workbook
Dim appWs As Excel.Worksheet

'This part creates a connection between an existing PCOMM session and Excel
Set autECLConnMgrObj = CreateObject("PCOMM.autECLConnMgr")
Set autECLOIAObj = CreateObject("PCOMM.autECLOIA")
Set autECLSessionObj = CreateObject("PCOMM.autECLSession")
Set autECLPSObj = CreateObject("PCOMM.autECLPS")
Set autECLConnList = CreateObject("PCOMM.autECLConnList")

autECLOIAObj.SetConnectionByHandle (autECLConnList(1).Handle)
autECLPSObj.SetConnectionByHandle (autECLConnList(1).Handle)
autECLConnList.Refresh

'Opens the template where the supplier codes are in (normal .xls)
With Application.FileDialog(1)
    .Title = "Please select a file to import!"
    .AllowMultiSelect = False
    If .Show <> -1 Then
        Exit Sub
    End If
    FileSelected = .SelectedItems(1)
End With

fileName = FileSelected

Set appExcel = Excel.Application
Set appWb = appExcel.Workbooks.Open(fileName:=fileName)
Set appWs = appWb.Worksheets("input")

appExcel.Visible = True
appWb.Worksheets("input").Activate

With appWs

autECLOIAObj.WaitForAppAvailable

'Loop thru every row in the template worksheet 
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row Step 1

'Start system navigation in AS/400
autECLPSObj.SetCursorPos 6, 23
autECLPSObj.SendKeys Cells(i, "A")
autECLPSObj.WaitForAttrib 6, 23, "00", "3c", 3, 10000
autECLOIAObj.WaitForInputReady
autECLOIAObj.WaitForAppAvailable
autECLPSObj.SendKeys "[enter]"
autECLOIAObj.WaitForInputReady
autECLOIAObj.WaitForAppAvailable
autECLPSObj.SendKeys "[pf13]"
autECLOIAObj.WaitForInputReady
autECLOIAObj.WaitForAppAvailable
autECLPSObj.SendKeys "[pf10]"
autECLOIAObj.WaitForInputReady
autECLOIAObj.WaitForAppAvailable
autECLPSObj.SetCursorPos 13, 24
autECLPSObj.SendKeys Cells(i, "B")
autECLPSObj.WaitForAttrib 13, 24, "00", "3c", 3, 10000
autECLOIAObj.WaitForInputReady
autECLOIAObj.WaitForAppAvailable
autECLPSObj.SendKeys "[enter]"
autECLOIAObj.WaitForInputReady
autECLOIAObj.WaitForAppAvailable
autECLPSObj.SendKeys "[pf8]"
autECLOIAObj.WaitForInputReady
autECLOIAObj.WaitForAppAvailable

If Cells(i, "C") = "" Then
    autECLPSObj.SetCursorPos 13, 21
    autECLPSObj.SendKeys "1"
    autECLPSObj.WaitForAttrib 13, 21, "00", "3c", 3, 10000
    autECLOIAObj.WaitForInputReady
    autECLOIAObj.WaitForAppAvailable

Else
    autECLPSObj.SetCursorPos 13, 21
    autECLPSObj.SendKeys Cells(i, "C")
    autECLPSObj.WaitForAttrib 13, 21, "00", "3c", 3, 10000
    autECLOIAObj.WaitForInputReady
    autECLOIAObj.WaitForAppAvailable
End If

autECLPSObj.SetCursorPos 21, 1
autECLPSObj.SendKeys Cells(i, "D")
autECLPSObj.WaitForAttrib 21, 1, "00", "3c", 3, 10000
autECLOIAObj.WaitForInputReady
autECLOIAObj.WaitForAppAvailable
autECLPSObj.SendKeys "[pf8]"
autECLOIAObj.WaitForInputReady
autECLOIAObj.WaitForAppAvailable
autECLPSObj.SendKeys "[pf12]"
autECLOIAObj.WaitForInputReady
autECLOIAObj.WaitForAppAvailable
autECLPSObj.SendKeys "[pf12]"
autECLOIAObj.WaitForInputReady
autECLOIAObj.WaitForAppAvailable

Next i

End With

appWb.Close
MsgBox ("Input done!")


End Sub
...