一所懸命に手抜きする

監査の仕事をしています。ITを利用し、良い意味で「手抜き」することは効率化と精度アップに役立つと思うんです。部下への引き継ぎのためにまずは諸々頭から引っ張り出そうとブログを始めました。

[ Main ]  [ 別館 ]
当ブログで取り上げられている事案やデータベース、人物等はすべてフィクションです。

AS400エミュレーター画面を全行コピーするマクロ

 最近とても忙しくなってすっかりご無沙汰しています。
物忘れがますますひどくなってきたので、備忘録を続けます。

Rollupしてはコピーって…大変です

 AS400ソースコードなどをデータ転送で取得したい!でもできないっ。という時には連結コピー

Rollupして連結コピー

 パーソナル・コミュニケーションズのエミュレータには「連結コピー」という機能があります。50行くらいのCLプログラムならソースコードをデータ転送するよりも、コピーしてRollupして連結コピー を数回繰り返す方が早いです。
 でも、何百行もあると、画面をコピー、ロールアップして連結コピー、またロールアップして連結コピー…なんて面倒です。途中で連結コピーせずにRollupすることもあったり。AS400のパーソナル・コミュニケーションズのエミュレータにはマクロ機能があるのでこれをうまく活用したいと思います。

Rollupしては連結コピー 自動化マクロ

 作成したのが下記マクロです。ツールバーに登録すると一発で全行コピーしてくれます。
 とにかく省力化の努力が大切です。

Copy_Rollup_and_Append_Loop_Macro
[PCOMM SCRIPT HEADER]
LANGUAGE=VBSCRIPT
DESCRIPTION=
[PCOMM SCRIPT SOURCE]
OPTION EXPLICIT
autECLSession.SetConnectionByName(ThisSessionName)

REM This line calls the macro subroutine
subSub1_

sub subSub1_()
   autECLSession.autECLOIA.WaitForAppAvailable
   
   autECLSession.autECLOIA.WaitForInputReady
   autECLMacro "[edit-copy]"
Do
   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "[roll up]"
   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "[roll up]"
   autECLSession.autECLOIA.WaitForInputReady
   autECLMacro "[edit-copyappend]"
 Loop Until autECLSession.autECLPS.GetText( 4,1, 4) = "    " 
   
   end sub

解説など…

1.パーソナル・コミュニケーションズではマクロ記録しても
 "[edit-copy]"の部分はCOPYキーを使わない限り記録されないはずです。
 メニューから Alt+EA Alt+ED などと選択してもマクロには記録されませんでした。
 ですから、この大切な部分は手動でコーディングすることになります。
2.全画面選択のコマンドが存在するかどうかはわかりませんが、
 autECLMacro "[edit-copy]"
 で表示されている画面全体をコピーしてくれます。
3.連結コピーは
 autECLMacro "[edit-copyappend]"
 です。
4.Do Loop で最終行までスクロールしています。
5.最終行の判定は .GetText( 4,1, 4) 左端4文字が空白としています。
 ページヘッダが3行あるので4行目で判断しています。
 自身の環境にあわせて終了条件を変更する必要があります。
6.不要行もコピーされるのでエディタなどで削除して下さい。
7.とても重要なこと
私はRollupキーで半ページスクロールに設定しています。1ページに設定してある場合には、

   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "[roll up]"
   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "[roll up]"

   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "[roll up]"

にする必要があります。