14-2.非定型操作にてEXCEL(vba)とTcplinkマクロを連携する(ファイル編)

By 岡田 - Posted: 2016/10/06 Last updated: 2016/10/09 - Leave a Comment
印刷用ページの表示 印刷用ページの表示
クリップボードでは単一データによる連携をご説明しましたが、複数のデータを連携したい時、データセットのファイルによる連携が有効です

Tcplinkマクロを使い、自分が処理しやすいように連携するワークファイルを編集しておき、ファイル転送後、EXCEL(vba)で1行ずつ読み込み情報を埋め込んでいきます

今回のEXCEL(vba)ではクリップボードを使っていませんので、前回記載がもれていた”Microsoft Forms 2.0 Object Library”を参照設定する必要はありません

仮想テープにバックアップしたボリューム通し番号(VSN)とDCB情報を得る

作業で発生したファイルを一時保管先としてVT(仮想テープ)に保存する業務があります。この業務結果として以下の情報を自動的に得る処理です
1)一時保管先の仮想テープのボリューム通し番号(VSN)をJOBLOGから抽出する
2)1)のDCB情報をJOBLOGから抽出する

※上記1)と2)はそれぞれバックアップしたデータセット単位に処理します

作業の流れとして、、
A)excel(vba)で情報を埋める場所をクリックしてもらう
B)EXCEL(vba)からTcplinkマクロを実行する
C)Tcplinkマクロの中で、、
c1)「ワークファイルの初期化」
c2)「SDSFのSJ、SBのFINDコマンドを用いてVSN情報を抽出」
c3)「ワークファイルへ書き出し」・・・VSN情報が終わるまでC2-C3を繰り返す
c4)「SDSFのSBのFINDコマンドを用いてDCB情報を抽出」
c5)「ワークファイルへ書き出し」・・・DCB情報が終わるまでc4-c5を繰り返す
c6)「書き出したワークファイルを整形・書き込み」
c7)「ワークファイルをダウンロード」
D)EXCEL(vba)に制御が戻ったら、C7でダウンロードしたファイルを1行ずつ読み込み、情報設定・セルを移動していく

です

EXCEL(vba)の説明

今回のEXCEL(vba)は以下になります
01: Sub バックアップ一覧の情報を埋める()
02: Dim buf As String
03: Dim cb As Object
04: Dim ret As Long
05:
06: MsgBox “データを埋めたい処理欄の先頭のデータセットの左の場所をクリックしてOKして下さい”
07:
08: With CreateObject(“wscript.shell”)
09: ret = .Run(“C:\VTSVOL_DCBGET.mac”, 7, True)
10: End With
11:
12: ‘BKUPINFO READ->dataput
13: Open “C:\TEMP\BKUPINFO.txt” For Input As #1
14:
15: ‘start position memory
16: ar = ActiveCell.Row
17: ac = ActiveCell.Column
18:
19: ‘LINE1 VTS1・・・DSN,VSN
20: ‘LINE2 VTS2・・・DSN,VSN
21: ‘LINE3 VTS3・・・DSN,VSN
22: ‘LINE4 VTS4・・・DSN,VSN
23: ‘LINE5 VTS5・・・DSN,VSN
24: ‘LINE6 VTS6・・・DSN,VSN
25: ‘LINE7 VTS7・・・DSN,VSN
26: ‘LINE8 VTS8・・・DSN,VSN
27:
28: Line Input #1, buf
29: Do While buf <> “”
30:
31: ‘ MsgBox buf
32: ActiveCell.Value = Mid(buf, 9, Len(buf) – 8)
33: ActiveCell.Offset(0, 1).Select
34: ActiveCell.Value = Left(buf, 6)
35: ActiveCell.Offset(1, -1).Select
36: Line Input #1, buf
37:
38: Loop
39:
40: ‘LRECLまでLOOP
41: Line Input #1, buf
42:
43: Do While buf = “”
44: Line Input #1, buf
45: Loop
46:
47: Cells(ar, ac).Select
48: ActiveCell.Offset(0, 2).Select
49: ‘LINE09 DCB1 VTS1(LRECL,BLKSIZE,RECFM)
50: ‘LINE10 DCB2 VTS2(LRECL,BLKSIZE,RECFM)
51: ‘LINE11 DCB3 VTS3(LRECL,BLKSIZE,RECFM)
52: ‘LINE12 DCB4 VTS4(LRECL,BLKSIZE,RECFM)
53: ‘LINE13 DCB5 VTS5(LRECL,BLKSIZE,RECFM)
54: ‘LINE14 DCB6 VTS6(LRECL,BLKSIZE,RECFM)
55: ‘LINE15 DCB7 VTS7(LRECL,BLKSIZE,RECFM)
56: ‘LINE16 DCB8 VTS8(LRECL,BLKSIZE,RECFM)
57:
58: Do While buf <> “”
59:
60: ActiveCell.Value = Mid(buf, 40, InStr(40, buf, ” “) – 40)
61: ActiveCell.Offset(0, 1).Select
62: ActiveCell.Value = Mid(buf, 9, InStr(9, buf, ” “) – 9)
63: ActiveCell.Offset(0, 1).Select
64: ActiveCell.Value = Mid(buf, 26, InStr(26, buf, ” “) – 26)
65: ActiveCell.Offset(1, -2).Select
66:
67: Line Input #1, buf
68:
69: Loop
70:
71: Close #1
72:
73: End Sub

Tcplinkに制御を渡す前の処理

06: MsgBox “データを埋めたい処理欄の先頭のデータセットの左の場所をクリックしてOKして下さい”
07:
08: With CreateObject(“wscript.shell”)
09: ret = .Run(“C:\VTSVOL_DCBGET.mac”, 7, True)
10: End With

06行目でバックアップ情報を入れたい箇所の一番左上をクリックするように促します(埋め込みの始まり)
08-09行目でTcplinkマクロを実行、終了まで待ちます

Tcplinkマクロの説明

Tcplinkマクロは以下になります。(VSN及びDCBの抜き出し処理、画面エラー判定、終了処理は一部割愛しています)

01: change session TCP3270-Ses01
02: message “これからバックアップ一覧のデータ取得処理を始めます。”
03: message “取得したい情報が入っているジョブの左にカーソルを置いてOKして下さい。”
04: ;
05: wait 1
06: until input
07: STRING “SJ”
08: until input
09: STRING “SCRNAME SDSFS” (04,21)
10: until input
11: emulator key [ENTER]
12: STRING “SWAP LIST” (04,21)
13: until input
14: emulator key [ENTER]
15: until input
16: UNTIL STRING (03,20) “アクティブ ISPF 論理セッション”
17: move cursor (05,07)
18: until input
19: emulator key [ENTER]
20: wait 1
21: ;
22: until input
23: STRING “SCRNAME BKUPI” (02,20)
24: until input
25: emulator key [ENTER]
26: until input
27: ;
28: string “2” (02,21)
29: emulator key [enter]
30: until input
31: string “‘BBBBBBBB.8.WORKFILE'” (14,26)
32: emulator key [enter]
33: until input
34: wait 1
35: string “F BKUPINFO”
36: emulator key [enter]
37: until input
38: wait 1
39: ;emulator key [newline]
40: ;wait 1
41: string “S” (06,2)
42: emulator key [enter]
43: until input
44: wait 1
45: string “RES”
46: emulator key [enter]
47: wait 1
48: ;
49: ;paste領域消去
50: edit copy (23,09) (23,75)
51: edit paste (04,09)
52: edit paste (05,09)
53: edit paste (06,09)
54: edit paste (07,09)
55: edit paste (08,09)
56: edit paste (09,09)
57: edit paste (10,09)
58: edit paste (11,09)
59: edit paste (12,09)
60: edit paste (13,09)
61: edit paste (14,09)
62: edit paste (15,09)
63: edit paste (16,09)
64: edit paste (17,09)
65: edit paste (18,09)
66: edit paste (19,09)
67: ;
68: string “SWAP SDSFS” (02,19)
69: until input
70: emulator key [enter]
71: wait 1
72: UNTIL STRING (03,2) “SDSF STATUS DISPLAY ALL CLASSES”
73: until input
74: emulator key [enter]
75: until input
76: string “RES” (02,15)
77: emulator key [enter]
78: until input
79: edit copy (11,33) (18,77)
80: wait 1
81: ;
82: STRING “SWAP BKUPI” (02,15)
83: until input
84: emulator key [ENTER]
85: until input
86: edit paste (04,17)
87: wait 1
88: ;
89: STRING “SWAP SDSFS” (02,18)
90: until input
91: emulator key [ENTER]
92: wait 1
93: until input
94: emulator key [pf3]
95: until input
96: STRING “?”
97: until input
98: emulator key [ENTER]
99: until input
100: emulator key [TAB]
101: emulator key [TAB]
102: until input
103: STRING “S”
104: until input
105: emulator key [ENTER]
106: wait 1
107: until input
108: ;
109: ;VOL1
110: ;
111: STRING “F ‘ VOLS='” (04,21)
112: until input
113: emulator key [ENTER]
114: until input
115: wait 1
116: edit copy (05,25) (05,30)
117: ;
118: STRING “SWAP BKUPI” (04,21)
119: until input
120: emulator key [ENTER]
121: wait 1
122: until input
123: edit paste (04,09)
124: until input
125: STRING “SWAP SDSFS” (02,18)
126: until input
127: emulator key [ENTER]
128: wait 1
129: ;
130: ;VOL2
131: ;
132: emulator key [PF5]
133: emulator key [PF5]
134: until input
135: wait 1
136: edit copy (05,25) (05,30)
137: ;
138: STRING “SWAP BKUPI” (04,21)
139: until input
140: emulator key [ENTER]
141: wait 1
142: until input
143: edit paste (05,09)
144: until input
145: STRING “SWAP SDSFS” (02,18)
146: until input
147: emulator key [ENTER]
148: wait 1
149: ;
150: ;VOL3
151: ;
152: emulator key [PF5]
153: emulator key [PF5]
154: until input
155: wait 1
156: edit copy (05,25) (05,30)
157: ;
158: STRING “SWAP BKUPI” (04,21)
159: until input
160: emulator key [ENTER]
161: wait 1
162: until input
163: edit paste (06,09)
164: until input
165: STRING “SWAP SDSFS” (02,18)
166: until input
167: emulator key [ENTER]
168: wait 1
169: ;
170: ;VOL4
171: ;
172: emulator key [PF5]
173: emulator key [PF5]
174: until input
175: wait 1
176: edit copy (05,25) (05,30)
177: ;
178: STRING “SWAP BKUPI” (04,21)
179: until input
180: emulator key [ENTER]
181: wait 1
182: until input
183: edit paste (07,09)
184: until input
185: STRING “SWAP SDSFS” (02,18)
186: until input
187: emulator key [ENTER]
188: wait 1
189: ;
190: ;
191: ;VOL5chk
192: ;
193: emulator key [PF5]
194: emulator key [PF5]
195: until input
196: wait 1
197: if string (3,57) “*B”
198: jump true DCB1
199: ;
200: :
201: 5個目以降のVOL情報取得処理
202: :
203: ;
204: ;DCB INFOMATION GET
205: ;
206: ;
207: :DCB1
208: emulator key [PF3]
209: emulator key [PF3]
210: until input
211: STRING “S”
212: until input
213: emulator key [ENTER]
214: wait 1
215: ;
216: STRING “F ‘ICE090I 0 OUTPUT LRECL'” (04,21)
217: until input
218: emulator key [ENTER]
219: ;
220: ;DCB1
221: ;
222: until input
223: edit copy (05,18) (05,75)
224: wait 1
225: ;
226: STRING “SWAP BKUPI” (04,21)
227: until input
228: emulator key [ENTER]
229: wait 1
230: until input
231: edit paste (12,09)
232: until input
233: STRING “SWAP SDSFS” (02,18)
234: until input
235: emulator key [ENTER]
236: wait 1
237: ;
238: ;DCB2
239: ;
240: emulator key [PF5]
241: emulator key [PF5]
242: until input
243: edit copy (05,18) (05,75)
244: wait 1
245: ;
246: STRING “SWAP BKUPI” (04,21)
247: until input
248: emulator key [ENTER]
249: wait 1
250: until input
251: edit paste (13,09)
252: until input
253: STRING “SWAP SDSFS” (02,18)
254: until input
255: emulator key [ENTER]
256: wait 1
257: ;
258: ;DCB3
259: ;
260: emulator key [PF5]
261: emulator key [PF5]
262: until input
263: edit copy (05,18) (05,75)
264: wait 1
265: ;
266: STRING “SWAP BKUPI” (04,21)
267: until input
268: emulator key [ENTER]
269: wait 1
270: until input
271: edit paste (14,09)
272: until input
273: STRING “SWAP SDSFS” (02,18)
274: until input
275: emulator key [ENTER]
276: wait 1
277: ;
278: ;DCB4
279: ;
280: emulator key [PF5]
281: emulator key [PF5]
282: until input
283: edit copy (05,18) (05,75)
284: wait 1
285: ;
286: STRING “SWAP BKUPI” (04,21)
287: until input
288: emulator key [ENTER]
289: wait 1
290: until input
291: edit paste (15,09)
292: until input
293: STRING “SWAP SDSFS” (02,18)
294: until input
295: emulator key [ENTER]
296: wait 1
297: ;
298: ;DCB5chk
299: ;
300: emulator key [PF5]
301: emulator key [PF5]
302: until input
303: wait 1
304: if string (3,57) “*B”
305: jump true OWARI
306: ;
307: :
308: 5個目以降のDCB情報取得処理
309: :
310: ;
311: :OWARI
312: STRING “SWAP BKUPI” (04,21)
313: until input
314: emulator key [ENTER]
315: wait 1
316: ;
317: ;BKUPINFOファイル整形処理
318: ;
319: emulator key [insert]
320: move cursor (12,22)
321: string ” ”
322: move cursor (13,23)
323: string ” ”
324: move cursor (14,22)
325: string ” ”
326: move cursor (16,23)
327: string ” ”
328: emulator key [ENTER]
329: until input
330: string “CHG ‘,’ ‘ ‘ ALL” (02,18)
331: emulator key [ENTER]
332: until input
333: string “CHG ‘*’ ‘ ‘ ALL” (02,18)
334: emulator key [ENTER]
335: until input
336: string “CHG ‘-‘ ‘ ‘ ALL” (02,18)
337: emulator key [ENTER]
338: until input
339: string “SAVE” (02,18)
340: emulator key [ENTER]
341: until input
342: ;
343: ;ファイル転送
344: ;
345: string “=6” (02,18)
346: emulator key [ENTER]
347: until input
348: RECEIVE “C:\temp\BKUPINFO.txt” ‘BBBBBBBB.8.WORKFILE(BKUPINFO)’ [JISCII CRLF
349: :
350: 終了処理
351: :

前処理・・・ワークファイルを開く

02: message “これからバックアップ一覧のデータ取得処理を始めます。”
03: message “取得したい情報が入っているジョブの左にカーソルを置いてOKして下さい。”
04: ;
05: wait 1
06: until input
07: STRING “SJ”
08: until input

Tcplinkマクロでは、最初に情報を抽出するJOBLOGを得るため、02-03行にてメッセージを出力してVTSバックアップジョブのJOBLOGの左にカーソルを置くように促しています
07行目でSJを入力させて、当該JCLを表示させてコメント欄にある処理したデータセットのリストを取得します(説明に不要な部分はマスクしています)
bkup2

09: STRING “SCRNAME SDSFS” (04,21)
10: until input
11: emulator key [ENTER]
12: STRING “SWAP LIST” (04,21)
13: until input
14: emulator key [ENTER]
15: until input
16: UNTIL STRING (03,20) “アクティブ ISPF 論理セッション”
17: move cursor (05,07)
18: until input
19: emulator key [ENTER]
20: wait 1
21: ;
22: until input
23: STRING “SCRNAME BKUPI” (02,20)
24: until input
25: emulator key [ENTER]
26: until input
27: ;

12行目以降で裏画面(SWAP)を作るため、
・上の画面を9行目でSDSFSという名称に設定
・12行目から19行目で新しい画面を作る
・23行目で新しい画面(ワークファイルの画面)をBKUPIという名称に設定します
この時点で、裏画面のISPFメインメニューが出ている事になります

28: string “2” (02,21)
29: emulator key [enter]
30: until input
31: string “‘BBBBBBBB.8.WORKFILE'” (14,26)
32: emulator key [enter]
33: until input
34: wait 1
35: string “F BKUPINFO”
36: emulator key [enter]
37: until input
38: wait 1
39: ;emulator key [newline]
40: ;wait 1
41: string “S” (06,2)
42: emulator key [enter]
43: until input
44: wait 1
45: string “RES”
46: emulator key [enter]
47: wait 1
48: ;
49: ;paste領域消去
50: edit copy (23,09) (23,75)
51: edit paste (04,09)
:
66: edit paste (19,09)
67: ;

28-37行目でワークファイル’BBBBBBBB.8.WORKFILE(BKUPINFO)’を開き、50-66行目で余分なデータを削除します
50行目でcopyしている23行目は、画面で何も書かれていない領域です

バックアップ先VSN取得処理その1・・・対象データセット名をJCLのコメント欄から得る

VSN1の取得処理について説明します。129行目から202行目の処理は以下と同じです。(ワークファイルの書き込み行が変っているだけです)

68: string “SWAP SDSFS” (02,19)
69: until input
70: emulator key [enter]
71: wait 1
72: UNTIL STRING (03,2) “SDSF STATUS DISPLAY ALL CLASSES”
73: until input
74: emulator key [enter]
75: until input
76: string “RES” (02,15)
77: emulator key [enter]
78: until input
79: edit copy (11,33) (18,77)
80: wait 1
81: ;

68行目のSWAPコマンドで9行目の画面に戻りました。72行目でSDSFの画面に戻った事を確認。
7行目で”SJ”が入力されている状態です。(説明に不要な情報は画面から消しました)
bkup2

74行目のENTERでJCL画面を開きます。79行目で赤枠の中をコピーします。
(実際に動作している業務では設定によって最大8データセットを処理するため、赤枠のコピー範囲になっています)
bkup3

82: STRING “SWAP BKUPI” (02,15)
83: until input
84: emulator key [ENTER]
85: until input
86: edit paste (04,17)
87: wait 1
88: ;
82行目でワークファイルの画面に移り、86行目で上画面の赤枠の中を下画面の水色の枠にコピーします(画面は整形後の画面なのでハイフンや”*”はありません)
bkup1

バックアップ先VSN取得処理その2・・・各データセット毎にVSNを得る

89: STRING “SWAP SDSFS” (02,18)
90: until input
91: emulator key [ENTER]
92: wait 1
93: until input
94: emulator key [pf3]
95: until input
96: STRING “?”
97: until input
98: emulator key [ENTER]
99: until input
100: emulator key [TAB]
101: emulator key [TAB]
102: until input
103: STRING “S”
104: until input
105: emulator key [ENTER]
106: wait 1

89-91行目でJCL画面を閉じ、94-105行目でJOBLOGのバックアップ先のVSN情報があるSYSMSG画面を開きます。
SYSMSGだけに限定しているのは、JOBLOG全体を開くと検索対象のテキスト” VOLS=”が1データセットにつき2件抽出されるためです。
bkup4

107: until input
108: ;
109: ;VOL1
110: ;
111: STRING “F ‘ VOLS='” (04,21)
112: until input
113: emulator key [ENTER]
114: until input
115: wait 1
116: edit copy (05,25) (05,30)
111行目でSYSMSG画面内から’ VOLS=’を検索します。存在する場合、結果が5行目に出てくるので、黄色の中をコピーします
bkup41

117: ;
118: STRING “SWAP BKUPI” (04,21)
119: until input
120: emulator key [ENTER]
121: wait 1
122: until input
123: edit paste (04,09)
124: until input
125: STRING “SWAP SDSFS” (02,18)
126: until input
127: emulator key [ENTER]
128: wait 1
118行目でワークファイル画面に移り、123行目で一番目のデータセットの保管先であるVTS001を貼り付けます。以後、SYSMSG内でVOLS=が無くなるまで繰り返します
bkup1


バックアップDCB情報取得

続いて、DCB情報を取得します。こちらもDCB2以降の処理はDCB1と同じ(ワークファイルへの書き込み行が異なるだけ)なので、DCB1だけ説明します

203: ;
204: ;DCB INFOMATION GET
205: ;
206: ;
207: :DCB1
208: emulator key [PF3]
209: emulator key [PF3]
210: until input
211: STRING “S”
212: until input
213: emulator key [ENTER]
214: wait 1
215: ;
216: STRING “F ‘ICE090I 0 OUTPUT LRECL'” (04,21)
217: until input
218: emulator key [ENTER]
219: ;
220: ;DCB1
221: ;
222: until input
223: edit copy (05,18) (05,75)
224: wait 1
208-209行でSYSMSG画面を閉じ、211画面でJOBLOG全体を開き、216行目でFINDコマンドでDCB情報が表示されているメッセージID(IEC090I)を検索。
VSNと同じく5行目に検索結果が表示されるため、赤枠をコピーします
bkup5

225: ;
226: STRING “SWAP BKUPI” (04,21)
227: until input
228: emulator key [ENTER]
229: wait 1
230: until input
231: edit paste (12,09)
232: until input
233: STRING “SWAP SDSFS” (02,18)
234: until input
235: emulator key [ENTER]
236: wait 1
226行目でワークファイルの画面に移り、231行目でワークファイル9行目(画面12行目)に書き出し、233行目でJOBLOG画面に戻ります

ワークファイル後処理・・・整形とダウンロード

311: :OWARI
312: STRING “SWAP BKUPI” (04,21)
313: until input
314: emulator key [ENTER]
315: wait 1
316: ;
317: ;BKUPINFOファイル整形処理
318: ;
319: emulator key [insert]
320: move cursor (12,22)
321: string ” ”
322: move cursor (13,23)
323: string ” ”
324: move cursor (14,22)
325: string ” ”
326: move cursor (16,23)
327: string ” ”
328: emulator key [ENTER]
329: until input
330: string “CHG ‘,’ ‘ ‘ ALL” (02,18)
331: emulator key [ENTER]
332: until input
333: string “CHG ‘*’ ‘ ‘ ALL” (02,18)
334: emulator key [ENTER]
335: until input
336: string “CHG ‘-‘ ‘ ‘ ALL” (02,18)
337: emulator key [ENTER]
338: until input
339: string “SAVE” (02,18)
340: emulator key [ENTER]
341: until input
320-328行目で空白をインサートしてDCB情報の列をあわせています
330-337で不要な記号(カンマ、アスタリスク、ハイフン)をCHANGEコマンドで消去、339行目でSAVEします

342: ;
343: ;ファイル転送
344: ;
345: string “=6” (02,18)
346: emulator key [ENTER]
347: until input
348: RECEIVE “C:\temp\BKUPINFO.txt” ‘BBBBBBBB.8.WORKFILE(BKUPINFO)’ [JISCII CRLF
349: :
350: 終了処理
351: :
345行目でISPFのコマンド入力画面を開き、348行目でワークファイルをダウンロードします
これで、制御がEXCEL(vba)に戻ります

Tcplink実行後のEXCEL(vba)処理

Tcplinkマクロで得た情報がc:\temp\bkupinfo.txtにダウンロードされました。このファイルを入力して情報をセルに入れていきます

入力となるbkupinfo.txtのファイルフォーマットが以下の通りです
bkupinfo

Tcplink処理後のEXCEL(vba)は以下の通りです
11:
12: ‘BKUPINFO READ->dataput
13: Open “C:\TEMP\BKUPINFO.txt” For Input As #1
14:
15: ‘start position memory
16: ar = ActiveCell.Row
17: ac = ActiveCell.Column
18:
19: ‘LINE1 VTS1・・・DSN,VSN
20: ‘LINE2 VTS2・・・DSN,VSN
21: ‘LINE3 VTS3・・・DSN,VSN
22: ‘LINE4 VTS4・・・DSN,VSN
23: ‘LINE5 VTS5・・・DSN,VSN
24: ‘LINE6 VTS6・・・DSN,VSN
25: ‘LINE7 VTS7・・・DSN,VSN
26: ‘LINE8 VTS8・・・DSN,VSN
27:
28: Line Input #1, buf
29: Do While buf <> “”
30:
31: ‘ MsgBox buf
32: ActiveCell.Value = Mid(buf, 9, Len(buf) ? 8)
33: ActiveCell.Offset(0, 1).Select
34: ActiveCell.Value = Left(buf, 6)
35: ActiveCell.Offset(1, -1).Select
36: Line Input #1, buf
37:
38: Loop

13行目でTcplinkでダウンロードしたファイルをオープンします。
16-17行目で選択されているセルの場所を記憶します。
28行目で1レコード目を読み込みbufに入れます。
32行目で選択されているセルに9行目以降の内容(データセット名)を与えます
33行目で選択セルの位置を一つ右に移します
34行目で先頭6文字(VSN名)をセルに与えます
35行目で選択セルの位置を左斜め下(32行目で与えたデータセット名の一つ下)に移します
36行目で次のレコードを読み込みます

29行目、38行目の間がループとなり、bufの内容が続く限り32-36行目の内容を繰り返します

39:
40: ‘LRECLまでLOOP
41: Line Input #1, buf
42:
43: Do While buf = “”
44: Line Input #1, buf
45: Loop
46:
47: Cells(ar, ac).Select
48: ActiveCell.Offset(0, 2).Select
49: ‘LINE09 DCB1 VTS1(LRECL,BLKSIZE,RECFM)
50: ‘LINE10 DCB2 VTS2(LRECL,BLKSIZE,RECFM)
51: ‘LINE11 DCB3 VTS3(LRECL,BLKSIZE,RECFM)
52: ‘LINE12 DCB4 VTS4(LRECL,BLKSIZE,RECFM)
53: ‘LINE13 DCB5 VTS5(LRECL,BLKSIZE,RECFM)
54: ‘LINE14 DCB6 VTS6(LRECL,BLKSIZE,RECFM)
55: ‘LINE15 DCB7 VTS7(LRECL,BLKSIZE,RECFM)
56: ‘LINE16 DCB8 VTS8(LRECL,BLKSIZE,RECFM)
57:
58: Do While buf <> “”
59:
60: ActiveCell.Value = Mid(buf, 40, InStr(40, buf, ” “) ? 40)
61: ActiveCell.Offset(0, 1).Select
62: ActiveCell.Value = Mid(buf, 9, InStr(9, buf, ” “) ? 9)
63: ActiveCell.Offset(0, 1).Select
64: ActiveCell.Value = Mid(buf, 26, InStr(26, buf, ” “) ? 26)
65: ActiveCell.Offset(1, -2).Select
66:
67: Line Input #1, buf
68:
69: Loop
70:
71: Close #1
72:
73: End Sub

VSNとデータセットが含まれていない行は改行レコードのみになっています。
41-45行目でDCB情報が発生するまでレコードを読み続けます
47行目で1番目のデータセットを書き込んだセルの位置に戻り、48行目で右に2つ移ります
60行目でRECFM(40行目から1ワード分)をセルに与えます
62行目でRECFM(9行目から1ワード分)をセルに与えます
64行目でBLKSIZE(26行目から1ワード分)をセルに与えます
60,62行目で選択セルを右に1つ移します
65行目で次のRECFMの位置に選択セルを移します
58-69行目でループします

71行目でファイルをクローズします
bkupinfo2
Posted in Tcplinkマクロ活用(拡張編) • • Top Of Page