Excel VBA マクロによる TeraTerm マクロ生成(1)
そんな阿漕なことして、何の意味があるんだ…と言われそうなネタ。
僕自身も、あんまり汎用性を感じたりしないんだけど、便利に使ってるので公開。
ネタとしては、これらの組み合わせ。
- TeraTerm マクロの作り方 - つれづれなるままに
- マクロサンプル - 自動ログイン(SSH版) - つれづれなるままに
- Excel VBA でテキストファイルを作る方法 - つれづれなるままに
Excel の挙動としては、こちらも参考にさせて頂きました。
- http://www.happy2-island.com/excelsmile/smile03/capter01011.shtml
- http://www.relief.jp/itnote/archives/013874.php
- http://www.relief.jp/itnote/archives/000482.php
皆様、有用な情報をありがとうございます。
なお、色のついたセルを元に戻す(色彩情報を消す)方法については、「マクロの記録」で見ています(…もっと効率のいいやり方があるかも)。
概要
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:起動できるサーバが無い…