0

現在、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。Excel スプレッドシートで列 A から L までを使用してsubDoWorkおり、スプレッドシートを 1 行ずつ下に移動し、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(または行2、列M)に貼り付けるだけでなく、その後ループで移動し、識別されるIfステートメントに基づいて常に列Mに貼り付ける必要がありfuncReadScreenます。

4

1 に答える 1