【VBA】Atermシリーズの簡単ログ取得マクロ

我が家の無線LANルーター(A t e r m W R 8 3 0 0 N )がやたら

リンクダウンを起こすようになり、何が起こっているのかを知るために作成したマクロ

結論から言うと、NECの無線LANルーターはログの内容が貧弱なうえに、

出力されるログの詳細が仕様が不明(サポートしていないの)で素人がみても推測程度の原因はつかめなかった。

しかし副産物で、またVBAのスキルアップできた。

・httpのデータを取得する場合は、IEの操作をVBで握るより、XMLを握った方が楽

・Activex Data Objects Library を使うと文字コードの変換が可能

「GetAtermLog.zip」をダウンロード

——–

Option Explicit

‘Aterm のURL、ID、PWを設定
Const URL As String = "http://192.168.0.1/index.cgi/syslog_common_c.log"
Const ID As String = "admin"
Const PW As String = "ココに【クイック設定Web】のパスワードを設定する"

Const OFFSET_ROW As Integer = 2
Const OFFSET_COLUM As Integer = 2

‘Microsoft XML vX.Xを参照設定させる。
Sub GetLogs()
   
    Dim data As String
    Dim data2() As String
    Dim i, max As Integer
       
    ‘ログをを取得
    Dim req As MSXML2.xmlHttp
    Set req = New MSXML2.xmlHttp
   
    Call req.Open("GET", URL, False, ID, PW)
    Call req.send(vbNull)
    If req.readyState <> 4 Or req.Status <> 200 Then
        ‘何かあれば、エラー処理を追加させる。
    End If
   
    ‘そのままExcelに出力すると日本語部分が文字化けするのでEUCに
    Call toEUC(req, data)
       
    data2 = Split(data, vbLf)
    max = UBound(data2)
    For i = 0 To max
        Me.Cells(i + OFFSET_ROW, OFFSET_COLUM) = data2(i)
    Next i
   
    Set req = Nothing
       
End Sub

‘文字化け対策(EUC変換)
‘Microsoft Activex Data Objects X.X Library を参照設定させる。
Sub toEUC(ByRef src As MSXML2.xmlHttp, ByRef dst As String)
    Dim a As adodb.Stream
    Set a = New adodb.Stream

    Call a.Open
    a.Position = 0
    a.Type = adTypeBinary
    Call a.Write(src.responseBody)
    a.Position = 0
    a.Type = adTypeText
    ‘使える文字セットはHKEY_CLASSES_ROOT\MIME\Database\Charsetを参照
    a.Charset = "EUC-JP"
    ‘a.Charset = "_autodetect" ‘自動判別でも可

    dst = a.ReadText
    a.Close
    Set a = Nothing

End Sub

コメント

タイトルとURLをコピーしました