Excel VBA で Tera Term Macro を実行
Tera Term マクロを Tera Term に読み込ませるのはコマンドラインで実行すればいいので、シェルから実行させる。
現状、参考程度に。
変更点としては
・マクロを実行するプログラムを呼び出す機能を追加
・マクロファイルの保存先をデスクトップに変更
ttpmacro.exe ってば、ttl ファイルの指定がフルパスでない場合に、自分と同じ場所にないと読み込まないという制限がある。
そして、ttpmacro.exe をデフォルトインストールすると、後から追記しようとするファイルがユーザアカウント制御 (UAC) により別管理されることがあり、うまく動いてくれない可能性があるという……
ということで、とりあえずデスクトップに置く仕様にしている。
WSH.SpecialFolders に指定した場所を変えれば、いろいろ対応できそう。
あと、以前実装した ping 機能は、今回は割愛。
応用としては、ttpmacro.exe ではなく ttermpro.exe に、シェル(コマンドライン)からオプション指定してもいい……というか、シンプルな内容ならそちらの方がよさそう。
ソース
以下、出来上がったソースを。
まず Excel の ThisWorkbook に貼り付けて xlsm 形式で保存する。
A2 以下 A 列にアクセス先サーバ名もしくは IP アドレスを。
B2 以下 B 列に使用するユーザID を。
保存したら、A列に入力したアクセス先をダブルクリックすると、Tera Term が起動してくれる。
なお Tera Term は C ドライブにインストールしている前提。
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) ' Excel VBA マクロによる TeraTerm マクロ生成するサンプルソース(暫定版) ' Modify : 黒猫666 - 2013/1/1 ' Update : 黒猫666 - 2020/3/20 ' Site : http://d.hatena.ne.jp/KuroNeko666 ''' 変数の宣言 '''''''''''''''''''''''''''''''''''''''''''' ' Object 設定 Dim FSO As Object Dim TXT As Object Dim WSH As Object ' 変数設定 Dim pFILEDIR As String ' 格納先ディレクトリ Dim pFILE As String ' TeraTerm マクロ用ファイル名 Dim pFILEPATH As String Dim pHOST As String ' アクセスするサーバ用変数 Dim pUSER As String ' アクセスユーザ用変数 Dim pPID As Double ' 列数設定 Dim nHOST As Integer ' アクセス先 Dim nUSER As Integer ' ユーザID ' Tera Term 実行ファイル Dim pTTERMDIR As String ' インストールフォルダ Dim pTTMEXE As String ' Tera Term マクロ実行 Dim pTTMACROPATH As String ' インストールパス ' マクロファイル格納先 ''' 変数の定義 '''''''''''''''''''''''''''''''''''''''''''' ' デフォルト定義 Set WSH = CreateObject("WScript.Shell") pFILEDIR = WSH.SpecialFolders("Desktop") pFILE = "teratermmacro.ttl" pHOST = "localhost" ' アクセス先(定義だけ) pUSER = "default" ' ユーザID pFILEPATH = pFILEDIR & "\" & pFILE ' 列の数値定義 nHOST = 1 ' アクセス先 nUSER = 2 ' ユーザID pTTERMDIR = "c:\Program Files (x86)\teraterm" pTTMEXE = "ttpmacro.exe" pTTMACROPATH = pTTERMDIR & "\" & pTTMEXE ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' 強制初期化… 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(pFILEPATH, 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 ' 作成したマクロを利用して、対象ホストにアクセス pPID = Shell(pTTMACROPATH & " " & pFILEPATH) Set FSO = Nothing End Sub