11.EXCEL(vba)からTcplinkマクロを作成する

By 岡田 - Posted: 2016/08/23 Last updated: 2016/08/28 - Leave a Comment
印刷用ページの表示 印刷用ページの表示
先日ご説明しましたTcplinkマクロ活用にて、Tcplinkマクロの特徴としては、、

・メモ帳などのテキストエディタで作成できる1行1命令のインタプリタである事
(中の文法のシンタックスチェックは実行時に行われる)
・拡張子を”.mac”にする事で当該ファイルをダブルクリックした時にマクロが実行できる

とご説明しました。これをEXCEL(vba)で書かせようというのが今回の趣旨です。

Tcplink STANDARDに限らず、テキストベースで書けるプログラムについては同様の手法で作成できます。
一例として、、
・TSO(TSS)で実行させたいCLISTをテキストファイルで作成、アップロードして実行する
・CSV形式のファイルを作成、別のアプリの入力にする です

また、秀丸マクロを作ることも上の手法で可能になりますので、応用範囲は広いです

ここでは以下の手順で”.mac”ファイルを作成します
(1)EXCEL(vba)内でマクロ命令を1行ずつ作成する
(2)(1)で作成した内容をクリップボードにコピーする
(3)EXCEL(vba)からメモ帳(notepad.exe)を起動(※)し、クリップボードの内容をペースト、保存する

(※)”.mac”の拡張子がついたファイル名を指定する

マクロ命令を作る

EXCEL(vba)は新しいEXCELに作成します。ALT+PF11でvbaの入力できる画面が開きますので、「標準モジュール」で作成します。

簡単なTcplinkマクロを生成するvbaです
===
01|Sub tcplink生成サンプル()
02|Dim buf2 As String
03|’マクロ命令生成
04| buf2 = “;コメント1” & vbNewLine
05| bun2 = buf2 & “;コメント2” & vbNewLine
06| buf2 = buf2 & “change session TCP3270-Ses01” & vbNewLine
07|
08| buf2 = buf2 & “message “”データセット名” & ActiveSheet.Range(“A1”).Value & “で実行します。よろしければOKして下さい””” & vbNewLine
09| buf2 = buf2 & “UNTIL STRING (01,4) “”待ちメッセージ””” & vbNewLine
10| buf2 = buf2 & “message “”後続処理を実行します。よろしければOKして下さい””” & vbNewLine
11|’クリップボード
12|With CB
13| .SetText buf2
14| .PutInClipboard
15|End With
16|’マクロ登録
17| rc = Shell(“notepad.exe C:\TcpLinktest.mac”, vbNormalFocus)
18| If rc <> 0 Then
19| Application.SendKeys “%EA”, True
20| Application.SendKeys “%EP”, True
21| Application.SendKeys “%FS”, True
22| Application.SendKeys “%FX”, True
23| Else
24| MsgBox “起動に失敗しました”
25| End If
26|
27|MsgBox “tcplinkマクロを起動します”
28|’マクロ実行
29| With CreateObject(“Wscript.Shell”)
30| .Run “C:\TcpLinktest.mac”, 5
31| End With

上のvbaを実行すると、c:\TcpLinktest.macに以下のテキストが作成されます
01|;コメント1
02|;コメント2
03|change session TCP3270-Ses01
04|message “データセット名 EXCELのA1セルの内容 で実行します。よろしければOKして下さい”
05|UNTIL STRING (01,4) “待ちメッセージ”
06|message “後続処理を実行します。よろしければOKして下さい”

マクロの処理内容ですが、、
03行目でTCP3270-Ses01のセッション画面に切り替える
04行目でメッセージを出力し、OKがクリックされるまで待ち状態となる
05行目で画面の1行目4桁目に”待ちメッセージ”が出るのを待つ
06行目でメッセージを出力し、OKがクリックされるまで待ち状態となる

です。01,02行目はコメント欄です

vbaとTcpLinktest.macのテキストを比較すると、違いが見えてきて今後の参考になるかと、思います。

いくつかポイントを、、

(01)・・・EXCELのセルの内容を取り込む

08| buf2 = buf2 & “message “”データセット名”” & ActiveSheet.Range(“A1”).Value & “”で実行します。よろしければOKして下さい””” & vbNewLine

ActiveSheet.Range(“A1”).Value
→この命令で、vbaを実行した時に画面に表示しているシート(アクティブシート)のA1セル(一番左上)の値を代入します。
A1セルにSYS1.PARMLIBを入れておくと、TcpLinktest.macの4行目は以下のようになります

04|message “データセット名SYS1.PARMLIBで実行します。よろしければOKして下さい”
となります。ダブルクォーテーションの数に注意してください

(02)・・・vba内で作成したテキストをTcpLinktest.macとして書き出す(外部起動)

外部起動する際に重宝するのがクリップボードです。
クリップボードと外部起動の機能を使って、他のアプリケーションを起動。クリップボードの内容を移します
16|’マクロ登録
17| rc = Shell(“notepad.exe C:\TcpLinktest.mac”, vbNormalFocus)
18| If rc <> 0 Then
19| Application.SendKeys “%EA”, True
20| Application.SendKeys “%EP”, True
21| Application.SendKeys “%FS”, True
22| Application.SendKeys “%FX”, True
23| Else
24| MsgBox “起動に失敗しました”
25| End If
26|

ここでのポイントは以下4行です
19| Application.SendKeys “%EA”, True
20| Application.SendKeys “%EP”, True
21| Application.SendKeys “%FS”, True
22| Application.SendKeys “%FX”, True
notepad.exe(メモ帳)を起動したあと、クリップボードの中をメモ帳に書き出すのですが、19行目から22行目で以下の事を行います。

上の%Eとか%Fの”%”はALTボタンを意味しています
ALT+E→A・・・全てを選択
ALT+E→P・・・貼り付け
ALT+F→S・・・上書き保存
ALT+F→X・・・メモ帳の終了

常に新しいファイルにクリップボードの内容を書き出すのであれば、貼り付け→保存で問題ないですが、同じファイルを繰り返し用いる場合、すでに書かれている内容を”全て書き換える”必要があるため、貼り付けの前に全てを選択を入れています


次回は、書き出したマクロの実行です
Posted in Tcplinkマクロ活用(拡張編) • • Top Of Page