逐行将数据写入Excel

时间:2018-08-01 18:14:11

标签: excel vbscript copy-paste 3270

我当前正在运行一个脚本,该脚本逐行循环通过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

我可以使用过程subDoWork将循环读取的数据粘贴到3270屏幕中。我在Excel电子表格上使用A列到L列,subDoWork能够逐行向下浏览电子表格,并将Excel中的数据复制并粘贴到3270屏幕上。以下是我用来从Excel电子表格的B列将数据输入3270屏幕的示例:

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将结果写入Excel中的M列。我目前正在读取A-L列,并希望根据给定行中的数据将我从funcReadScreen收到的结果输入到Excel中的M列。

意思是,该错误应粘贴到该行的M列中,然后转到下一行,如果通过funcReadScreen给出了不同的结果/错误,则将该结果/错误粘贴到M列中移至下一行,直到完成。因此,如果我通过读取屏幕功能收到错误“无效编号”,我想将该结果写入该行的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(或M行第2行)中,而且还需要随循环移动,并始终基于If粘贴到M列中funcReadScreen标识的语句。

1 个答案:

答案 0 :(得分:0)

在处理了此问题几天后,我得以解决此问题。我只是在主代码的末尾添加了以下IF语句,所以效果很好。谢谢您的协助。

If funcReadScreen(24,2,27) = "INVALID NUMBER" Then
rw.Cells(13).Value = "Invalid Number"