【问题标题】:Write Data To Excel Row By Row将数据逐行写入 Excel
【发布时间】:2019-01-09 09:50:13
【问题描述】:

我目前正在运行一个脚本,该脚本逐行循环遍历 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 尝试此操作,但它不起作用:

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 列),而且随后根据我的 If 语句与 @ 一起移动循环并始终粘贴到 M 列987654333@标识。

【问题讨论】:

  • 在您的示例中,funcReadScreen 正在检查“INVALID NUMBER”,然后在您的下一个示例中为“*** INVALID NUMBER ***”。那么它是哪一个?此外,但它不起作用并不会告诉任何人任何事情。更详细地描述什么不起作用,正在发生什么。
  • funcReadScreen 正在读取屏幕的特定区域。如果数字无效,屏幕将显示“*** INVALID NUMBER ”,这就是将“无效数字”放入该行的 M 列的触发器。如果 funcReadScreen 在屏幕上找到“ INVALID NUMBER ***”,我想将“无效数字”写入 excel。我已经编辑了帖子以包含确切不起作用的内容。谢谢
  • ActiveWorkbook 是(单值)属性,而不是集合或方法,因此 objExcel.ActiveWorkbook("0711_Settlement2.xlsx") 不起作用。你的意思是objExcel.Workbooks("0711_Settlement2.xlsx")
  • 我已经进行了更改,现在我收到“呼叫被被呼叫者拒绝”错误。对此错误有何见解?

标签: excel vbscript copy-paste 3270


【解决方案1】:

在处理这个问题几天后,我能够解决这个问题。我只是在我的主代码末尾添加了以下 IF 语句,效果很好。感谢您的帮助。

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

【讨论】:

    猜你喜欢
    • 2014-12-03
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多