Excel VBA マクロによる TeraTerm マクロ生成(1)

そんな阿漕なことして、何の意味があるんだ…と言われそうなネタ。
僕自身も、あんまり汎用性を感じたりしないんだけど、便利に使ってるので公開。


ネタとしては、これらの組み合わせ。


Excel の挙動としては、こちらも参考にさせて頂きました。


皆様、有用な情報をありがとうございます。
なお、色のついたセルを元に戻す(色彩情報を消す)方法については、「マクロの記録」で見ています(…もっと効率のいいやり方があるかも)。

概要

TeraTerm マクロを出力するけど、変更させたい部分は Excel に列記しといて、ファイルを作成するときに差し替える。
仕様としては、Excel の A 列にホスト名 or IPアドレスを入力。
ユーザIDは…B列に入れておくか。
なければ固定(デフォルト値)を使うということで。
で、A列をダブルクリックすると、セルの色が変わってマクロを生成し、自動ログイン。
セルに色がついているホストは、もう一度ダブルクリックして色を消すか、別の方法で色を消さないとアクセスできないようにする。
TeraTerm のマクロについては… う〜ん、デフォルトは、Excel ファイルのある場所に、そのまま吐きだそう。
必要が生じたら、ユーザフォームでも作って指定すれば良いかな。

実際のコーディング

これらの仕様から、まずコードを書くのは Workbook_SheetBeforeDoubleClick の中となる。
ダブルクリックしたセルの情報は target のプロパティで取得できるっぽい。


ちょっと変数設定で難儀したけど、作ってみた。

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
' Excel VBA マクロによる TeraTerm マクロ生成するサンプルソース(開発中)
' Modify : 黒猫666 - 2013/1/1
' Site   : http://d.hatena.ne.jp/KuroNeko666

''' 変数の宣言 ''''''''''''''''''''''''''''''''''''''''''''
' Object 設定
Dim FSO As Object
Dim TXT As Object

' 変数設定
Dim pFILE As String         ' TeraTerm マクロ用ファイル
Dim pHOST As String         ' アクセスするサーバ用変数
Dim pUSER As String         ' アクセスユーザ用変数

' 列数設定
Dim nHOST As Integer        ' アクセス先
Dim nUSER As Integer        ' ユーザID

''' 変数の定義 ''''''''''''''''''''''''''''''''''''''''''''

' デフォルト定義
pFILE = "teratermmacro.ttl"
pHOST = "localhost"         ' アクセス先(定義だけ)
pUSER = "default"           ' ユーザID

' 列の数値定義
nHOST = 1                   ' アクセス先
nUSER = 2                   ' ユーザID

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

' 強制初期化…
Cells(1, 1) = "アクセス先サーバ"
Cells(1, 2) = "ユーザID"

' ダブルクリックしたセルが A 列じゃなかったり、さらに 1 行目だったりしたら、強制終了。
If Intersect(Target, Range("A:A")) Is Nothing Or Target.Row = 1 Then Exit Sub
Cancel = True

' セルの色彩情報で、処理を変更
If Target.Interior.ColorIndex = xlNone Then
    
    ' もしアクセス先の記載がなかったら終了。
    If Target.Value = "" Then
        Exit Sub
    Else
        ' あったら、とりあえず信じ込む。
        pHOST = Target.Value
    End If
    
    Target.Interior.ColorIndex = 6
    
    ' 併せて 2 列目に入力があれば、ユーザIDだと信じ込む。
    If Cells(Target.Row, nUSER) <> "" Then
        pUSER = Cells(Target.Row, nUSER)
    End If
    
Else
    Target.Interior.ColorIndex = xlNone
    Exit Sub
End If

Cancel = True
Set FSO = CreateObject("Scripting.FileSystemObject")
    ' 上書き     : する = true, しない = false (存在したらエラー)
    ' 文字コード : Unicode(UTF) = true, ASCII = false
    Set TXT = FSO.CreateTextFile(pFILE, True, False)
        TXT.WriteLine ("; Generate by Excel VBA (KuroNeko666)")
        TXT.WriteLine ("; Original ttl by TeraTerm sample")
        TXT.WriteLine ("; Creation http://d.hatena.ne.jp/KuroNeko666/20130101")
        TXT.WriteLine ("")
        TXT.WriteLine ("username = '" & pUSER & "'")
        TXT.WriteLine ("hostname = '" & pHOST & "'")
        TXT.WriteLine ("")
        TXT.WriteLine (";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;")
        TXT.WriteLine ("")
        TXT.WriteLine ("msg = 'Enter password for user '")
        TXT.WriteLine ("strconcat msg username")
        TXT.WriteLine ("passwordbox msg 'Get password'")
        TXT.WriteLine ("")
        TXT.WriteLine ("msg = hostname")
        TXT.WriteLine ("strconcat msg ':22 /ssh /auth=password /user='")
        TXT.WriteLine ("strconcat msg username")
        TXT.WriteLine ("strconcat msg ' /passwd='")
        TXT.WriteLine ("strconcat msg inputstr")
        TXT.WriteLine ("")
        TXT.WriteLine ("connect msg")
        TXT.Close
    Set TXT = Nothing

    ' 作成したマクロを利用して、対象ホストにアクセス

    '##################
    '###  開 発 中  ###
    '##################

Set FSO = Nothing

End Sub

とりあえず、これでセルをダブルクリックすると TeraTerm のマクロを記述する VBA マクロの骨だけは出来たと思う。
Excel 2007 で、新規作成したブックの VBA を開いて Workbook_SheetBeforeDoubleClick に上記のサンプルを貼り付け、拡張子 xlsm で保存。
そのままセルをダブルクリックすれば初期設定は完了するはず。
2行目以降に、ホストとユーザIDを適切に入力すれば、自動ログインマクロの作成だけは簡単にできるはず。


このまま Excel VBA から TeraTerm を起動させるようにしてもいいし、Do か何かでファイル名を変更しつつ Loop させれば一気に大量の TeraTerm マクロを作れるだろう。
logopen コマンドを追記すれば、TeraTerm を利用したすべてのアクセスで、ログ取得できるようになる。


このスクリプトのメリットは、大量にアクセス先がある場合に、ホスト名とユーザ名だけ記載すればアクセス可能なこと。
ただし、毎回パスワードを入力しないといけないのが玉に瑕。…ちょっと TeraTerm のマクロで使うコマンドを知ってれば、修正可能だけど。


開発完了は…いつになるかな…。
自宅環境でテスト出来なくて*1、困ってたりする。




ちなみに、なんで正月元旦からこんなことしてるかというと…単に暇だったから。

*1:起動できるサーバが無い…