Запись данных в строку Excel по строке

В настоящее время я запускаю скрипт, который циклически перебирает электронную таблицу Excel, считывает данные из Excel и обновляет экран в эмуляторе 3270. Цикл завершается с использованием следующей процедуры:

Sub Main
    subGetSession
    subGoToScreen "DELP", "********", "0000000001"
    Dim rw
    Dim TITLE
        TITLE = "Script Completion Confirmation"
    Set atlDirectorObject  = CreateObject("atlDirectorObject.atlDirector")
    Set objExcel           = createobject("Excel.Application")
    Set objExcelWb         = objExcel.Workbooks.Open
                           ("S:\Scripting\0711_Settlement2.xlsx")
    Set objExcelSht        = objExcelWb.Worksheets("Test")
    Set oFileObject        = CreateObject("Scripting.FileSystemObject")
    rw = 2
    objExcel.Visible = True
    Do While objExcel.CountA(objExcelSht.Rows(rw)) > 0
        subDoWork objExcelSht.Rows(rw)
        rw = rw + 1

        If (Err.Number <> 0) Then
            On Error GoTo 0
            WScript.Echo "Script Has Been Terminated"
            WScript.Quit
        End If
        On Error GoTo 0
    Loop
    MsgBox "End of Worksheet Has Been Reached" & Chr(13) & "" & Chr(13) & "Script Completed!", vbOkOnly, TITLE
End Sub

Я могу вставить данные, которые читает цикл в экран 3270, используя процедуру subDoWork, Я использую столбцы от A до L в электронной таблице Excel и subDoWork может перемещаться по электронной таблице строка за строкой, копировать и вставлять данные из Excel на экран 3270. Ниже приведен пример того, что я использую для ввода данных на экран 3270 из столбца B электронной таблицы Excel:

subMoveCursor 11, 5
subEnterData rw.Cells(2).Value

Затем, после вставки данных, я использую funcReadScreen чтобы прочитать экран в 3270 и создать всплывающее окно с результатом, который я получаю из данной строки из Excel.

Sub subErrorHandle
    If funcReadScreen(24,2,37) = "A TRANSFER IS ALREADY PENDING" Then
        subErrorHandle_TransferPending
    Else
        If funcReadScreen(24,2,27) = "INVALID NUMBER" Then
            subErrorHandle_InvalidNumber
        End If
    End If
End Sub

То, что я хочу сделать, это использовать функцию funcReadScreen записать этот результат в столбец M в Excel. В настоящее время я читаю столбцы A - L и хотел бы ввести результат, полученный от funcReadScreen, в столбец M в Excel на основе данных в данной строке.

Это означает, что эта ошибка должна быть вставлена ​​в столбец M для этой строки, а затем перейти к следующей строке, и если другой результат / ошибка передается через funcReadScreen, затем вставьте этот результат / ошибку в столбец M для этой строки и перейдите к следующей строке, пока не закончите. Итак, если я получаю ошибку "Invalid Number" через функцию чтения с экрана, я хочу записать этот результат в столбец M для этой строки.

В настоящее время я использую следующую подпрограмму, чтобы попытаться это, но она не работает:

Sub subWriteToExcel2
    Dim objExcel, objExcelWb, objExcelSht

    Set objExcel    = GetObject(, "Excel.Application")
    Set objExcelWb  = objExcel.ActiveWorkbook("0711_Settlement2.xlsx")
    Set objExcelSht = objExcel.ActiveWorkbook.Worksheets("Test")

    If funcReadScreen(24,2,27) = "*** INVALID NUMBER ***" Then
        objExcelSht.Cells(2,13).Value = "Invalid Number"
    End If
End Sub

Кто-нибудь может помочь?

Изменить: То, что, кажется, не работает, это то, что я не могу "получить" объект Excel, как кажется. Я получаю ошибку

объект не поддерживает это свойство или метод: objExcel.ActiveWorkbook

Тем не менее, мне нужно это не только вставить значение в objExcelSht.Cells(2,13).Value (или строка 2, столбец M), но затем перейти с циклом и ВСЕГДА вставить в столбец M, основываясь на моем If заявление с чем funcReadScreen идентифицирует.

1 ответ

Решение

Поработав над этой проблемой пару дней, я смог ее решить. Я просто добавил следующий оператор IF в конец основного кода, и он отлично работает. Спасибо за помощь.

If funcReadScreen(24,2,27) = "INVALID NUMBER" Then
rw.Cells(13).Value = "Invalid Number"
Другие вопросы по тегам