現在、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
ます。