なぜVBAとTeraTermを融合させないと満足しないのか?
データをTeraTermで取得した後、Excelで整理する、そんな作業ってたくさんあるんじゃないでしょうか。
単純なTeraTermマクロはシンプルに作れると思いますが、
ExcelVBAからTeraTermマクロをコントロールできると、幅が広がります。
何が便利かというと、、、
**「ユーザインターフェイスの統一」**が大きなメリット。
例えば以下のようなモジュールがあったとします。
- Linuxサーバでコマンドを実行
- 結果を取得する
- Excel上に展開する
普通につくると、TeraTermマクロ、SCP、Excelなどを別々につくって実行することになりますが、ExcelVBAから動かすことで、ユーザの操作を簡素化できます。
黒魔術のレシピ
それではさっそく見ていきましょう。
以下は、定義した内容をもとに、シェルを実行して結果を出力するサンプルです。
Sub TeraTermAction()
'変数定義(適当な値を代入してください)
Dim ACCOUNT As String 'TeraTermログインアカウント
Dim PASSWD As String 'パスワード(入力する方式にしてもOK)
Dim PROMPTNAME As String 'TeraTermプロンプトを設定
Dim LOGINPROMPT As String 'ログインプロンプトを設定(etc LOGIN:)
Dim PWPROMPT As String 'パスワードプロンプトを設定
Dim TTL_Path As String 'TeraTermMacroのファイルが存在するパスを指定
'その他の変数の定義は省略しています...
'コマンドファイル名の作成
sCmd_File = ThisWorkbook.Path & "¥sample_command.cmd"
'TTLファイル名の作成
sTtl_File = ThisWorkbook.Path & "¥sample_tterm.ttl"
'TTLファイル作成
'シェルを実行するTeraTermマクロを作成
n = FreeFile
Open TTL_File For Output As #n
'ここからTeraTermマクロの記述
Print #n, "UsernamePrompt ='" & LOGINPROMPT & "'"
Print #n, "prompt='" & PROMPTNAME & "'"
Print #n, "PasswordPrompt ='" & PWPROMPT & "'"
Print #n, "wait UsernamePrompt"
Print #n, "sendln '" & ACCOUNT & "'"
Print #n, "wait PasswordPrompt"
Print #n, "sendln '" & PASSWD & "'"
Print #n, "wait prompt"
Print #n, "sendln 'TEST.sh XXX > OUTPUT.log'"
Print #n, "wait prompt"
Print #n, "sendln 'exit'"
Close #n
'コマンドファイル作成
'TeraTermMacroをキックするbatを作成
n = FreeFile
Open CMD_File For Output As #n
'ここからbatの記述
Print #n, "@ECHO OFF"
Print #n, "SET TTPMACRO=""" & TTL_Path & """"
Print #n, "SET LOGINTTL=""" & TTL_File & """"
Print #n, "START /WAIT /D%TTPMACRO% ttpmacro.exe /V %LOGINTTL%"
Print #n, "DEL """ & CMD_File & """ """ & TTL_File & """"
Close #n
makeCommand = True
'コマンド実施
'batを実行してTeraTermMacroを起動する
Set oShell = CreateObject("WScript.Shell")
oShell.Run """" & CMD_File & """", , True
Set oShell = Nothing
End Sub
これでExcelVBAからTeratermマクロを呼び出し、て処理を実行できます。
処理内容はこのスクリプト内で動的に記述できるので、パターンがある場合にも便利ですね。
気をつける点
デメリットとしては、ただでさえクライアントサイドでの動作で不安定なTeraTermマクロなので、細かい動作は気をつけたほうが良いです。
たまに処理タイミングの問題で動作が止まる可能性もあります。
まずはサーバサイドでの処理を検討し、難しい場合にそれを補完する方法として検討するのが良いと思います。更新処理などにはあまりむいてないです。
まとめ
さて、今回はExcelVBAからTeraTermを起動させる黒魔術のお話でした。
ここまでやるか?って感じですが、コテコテの運用現場で制約が多い場合には救いになるかもしれません。
特に精緻な動きが求められないケースで、少しでも工数を削減したいときにおすすめです。
Let's try!