秘密基地、どこに作った?

EXCEL2003のマクロを使用して、eventlogの6005と6006を取得し、
それらに対応する時刻を出力させたいのですが可能でしょうか。

お分かりになる方 ご教示の程、宜しくお願い致します。

A 回答 (4件)

> これらが発生する原因は何が考えられるでしょうか。



OS 名と OS のバージョン、およびマクロ実行時のログインアカウントの権限は?

Sql の WHERE 句が複雑すぎるのかもしれません。これを簡単に、つまり、2回に
わけて 6005 と 6006 を取得するか、WHERE 句の AND 以降を全てカットし、
全てのイベントコードを取得してから、 Excel 側で加工するようにするか...
で改善するかも。

▼ 6005 取得の Sql(6006 は最後を " AND EventCode = 6006”に変更)

  Sql = ""
  Sql = Sql & "SELECT *"
  Sql = Sql & " FROM Win32_NTLogEvent"
  Sql = Sql & " WHERE Logfile = 'System'" _
       & " AND EventCode = 6005"

これにより Excel への出力部 VBA ソースの修正が必要になりますが、その辺は
大丈夫ですよね?

参考URL:http://www.microsoft.com/japan/technet/scriptcen …
    • good
    • 1
この回答へのお礼

お礼が遅くなってしまい申し訳ありません。

6005と6006を別シートに分けた所、
問題無く出力できました。

今回の質問では大変お世話になりました。
自身のレベルアップも図れ、大変嬉しく思います。
分かり易いご回答、有難う御座いました。

お礼日時:2006/12/04 23:53

#1 です。



Excelという範疇でしたから、イベントログについて間違えていました。
今、イベントヴューアで見てみましたが、今の私では良く分からないし、Excel VBAの直接の範疇ではないような気がしましたので、手を引きます。

イベントログ

参考URL:http://www.microsoft.com/japan/technet/scriptcen …
    • good
    • 0
この回答へのお礼

舌足らずな質問、大変失礼致しました。
今後気を付けさせて頂きます。

ご回答有難う御座いました。

お礼日時:2006/11/27 23:57

こんにちは。

KenKen_SP です。

こんな感じで WMI を使うか、ReadEventLog API を使えば VBA で可能です。

WMI の方が手軽ですがちょいと遅いです。WMI で得られる内容の詳細については
参考 URL で調べて下さい。

' // イベントコード 6005, 6006 を取得します
Sub SampleProc()
  
  Const wbemFlagReturnImmediately As Long = &H10
  Const wbemFlagForwardOnly    As Long = &H20
    
  Dim Service  As Object
  Dim EventList As Object
  Dim Obj    As Object
  Dim sComputer As String
  Dim lFlags  As Long
  Dim Sql    As String
  Dim i     As Long
  
'  On Error Resume Next
  
  sComputer = "."
  lFlags = wbemFlagReturnImmediately Or wbemFlagForwardOnly
  
  Sql = ""
  Sql = Sql & "SELECT *"
  Sql = Sql & " FROM Win32_NTLogEvent"
  Sql = Sql & " WHERE Logfile = 'System'" _
       & " AND EventCode = 6005 OR EventCode = 6006"
  
  Set Service = GetObject("winmgmts:" _
         & "{impersonationLevel=impersonate,(Security)}!\\" _
         & sComputer & "\root\cimv2")
  Set EventList = Service.ExecQuery(Sql, iFlags:=lFlags)
  
  ' 出力
  Cells.Clear
  Range("A1:D1").Value = Array("Code", "DateTime", "Computer", "Message")
  i = 2
  For Each Obj In EventList
    Cells(i, "A").Value = Obj.EventCode
    Cells(i, "B").Value = Obj.TimeGenerated ' yyyymmddhhmmss.0000・・・形式です
    Cells(i, "C").Value = Obj.ComputerName
    Cells(i, "D").Value = Replace$(Obj.Message, vbCrLf, "")
    i = i + 1
  Next
  Columns("A:D").AutoFit
  
  Set EventList = Nothing
  Set Service = Nothing

End Sub

参考URL:http://msdn.microsoft.com/library/default.asp?ur …

この回答への補足

度々申し訳ありません。
お礼のコメントに補足をさせて下さい。

コメント欄の"⇒"部でのエラーは数度目の実行で何故か無くなりました。
しかし、今度はfor~Nextでオートメーションエラーが発生してしまいます。
エラーは、実行(F5)で送るとi=120あたりで、ステップイン(F8)で送るとi=20あたりで発生します。

これらが発生する原因は何が考えられるでしょうか。

補足日時:2006/11/28 00:16
    • good
    • 0
この回答へのお礼

ご回答有難う御座います。

WMIは今まで使用する機会がなかったので大変興味深いです。
色々と使えそうですので今後、勉強してみようと思います。

あと、一点質問させて下さい。
  >  ' 出力
  >  Cells.Clear
  >  Range("A1:D1").Value = Array("Code", "DateTime", "Computer", "Message")
  >  i = 2
⇒> For Each Obj In EventList
  >    Cells(i, "A").Value = Obj.EventCode

ご回答頂いたコードをそのまま貼り付け実行してみたところ
上記コードの"⇒"部でエラーが発生してしまうのですが、
原因として何が考えられるでしょうか。

再度の質問で申し訳ありませんが、教えて頂けませんでしょうか。

お礼日時:2006/11/27 23:38

こんばんは。



質問の意味が分かりません。

>eventlogの6005と6006

なんに対するイベントログなのですか?ただ、何もなくてイベントが発生するというようなことはありません。何かに起動しているわけで、まったくの自動でイベントが発生しているわけではありません。それは、OnTimeや、ActiveX コントロールなどの、タイマーだと思います。ただ、そうですと、結構、難しいものがあると思います。つまり、元がマクロの場合は、二つは、同時に働かないからです。詳しい状況が分からないと、できません。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報