Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Mit VBA Event Viewer auslesen

Forumthread: Mit VBA Event Viewer auslesen

Mit VBA Event Viewer auslesen
11.07.2013 16:57:26
Nette13
Hallo zusammen,
hat jemand von Euch schon einmal versucht, über vba den event viewer auszulesen. Ich möchte gern in einer Excel Datei, das Datum und die Uhrzeit für das Windows logon und log off an meinem Rechner haben. Daraus möchte ich eine Zeiterfassung generieren.
Beim event viewer habe ich gar keine Ahnung. Hat jemand von Euch eine Idee?
Hilfreiche Tips sind jederzeit willkommen.
Lieben Gruß & danke vorab
Annette

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mit VBA Event Viewer auslesen
11.07.2013 19:06:10
Oberschlumpf
Hi Annette
Was spricht gegen diese Lösung (so mache ich es auf der Arbeit):
1. Meine in Excel erstellte Arbeitszeitnachweis-Datei befindet sich im Autostart.
2. Jedes Mal, wenn ich mich anmelde, wird die Datei geöffnet und per VBA-Code wird die in dem Moment aktuelle Uhrzeit in die richtige Zelle eingetragen.
3. Die Datei bleibt bis zum Feierabend geöffnet.
4. Bevor ich mich zum Feierabénd wieder abmelde, wird die Excel-Datei als letzte geschlossen.
5. Im BeforeClose-Ereignis steht wieder VBA-Code, der nun die Feierabendzeit in die richtige Zelle einträgt.
PC is aus, die Zeiten wurden automatisch eingetragen, ich geh nach Haus :-)
Wenn ich, warum auch immer, während der Arbeitszeit die Excel-Datei schließen muss, wird dank des Codes im BeforeClose immer jeweils die aktuelle Uhrzeit für Feierabend eingetragen.
Und wenn ich die Datei wieder öffne, wird die Startzeit NICHT überschrieben, da die Startzeit nur dann eingetragen wird, wenn die entsprechende Zelle noch leer ist.
Hilft diese Idee vllt weiter, oder muss es noch immer der Event-Viewer sein?
Ciao
Thorsten

Anzeige
AW: Mit VBA Event Viewer auslesen
12.07.2013 10:25:04
bst
Auch Hallo,
einfach mal den freundlichen https://duckduckgo.com/ an werfen und nach VBA EventLog suchen hilft ;-)
"Select * from Win32_NTLogEvent Where Logfile = 'System'"
liefert alle Einträge aus dem Eventlog System.
"Der Ereignisprotokolldienst wurde gestartet" hat den EventCode 6005, "Der Ereignisprotokolldienst wurde beendet" har den EventCode 6006.
Nimm (falls Du bei denen bleiben willst) etwas wie:
"Select * from Win32_NTLogEvent Where Logfile = 'System' And (EventCode = 6005 Or EventCode = 6006)"
Datum und Uhrzeit musst Du noch selber auseinander wursteln.
Siehe:
http://computer.wer-weiss-was.de/visual-basic/event_viewer_system_auslesen-6566153.html
http://support.microsoft.com/kb/970904
http://msdn.microsoft.com/en-us/library/windows/desktop/aa394226(v=vs.85).aspx
HTH, Bernd
--
Option Explicit
' Logfile: System, Application, Security
Sub x()
Dim objWMI As Object
Dim strComputer As String
Dim colLoggedEvents As Object
Dim objItem As Object
strComputer = "."
Set objWMI = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Security)}!\\" &  _
strComputer & "\root\cimv2")
Set colLoggedEvents = objWMI.ExecQuery("Select * from Win32_NTLogEvent Where Logfile = ' _
System' And (EventCode = 6005 Or EventCode = 6006)")
For Each objItem In colLoggedEvents
Debug.Print objItem.EventCode, objItem.Message, objItem.TimeGenerated
Next
Set objWMI = Nothing
End Sub

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Event Viewer mit VBA in Excel auslesen


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu starten.

  2. Ein neues Modul erstellen: Klicke mit der rechten Maustaste auf „VBAProject (dein Workbook)“ und wähle „Einfügen“ > „Modul“.

  3. VBA-Code einfügen: Kopiere den folgenden Code und füge ihn in das Modul ein:

    Option Explicit
    ' Logfile: System, Application, Security
    Sub EventViewerAuslesen()
       Dim objWMI As Object
       Dim strComputer As String
       Dim colLoggedEvents As Object
       Dim objItem As Object
    
       strComputer = "."
       Set objWMI = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Security)}!\\" & strComputer & "\root\cimv2")
       Set colLoggedEvents = objWMI.ExecQuery("Select * from Win32_NTLogEvent Where Logfile = 'System' And (EventCode = 6005 Or EventCode = 6006)")
    
       For Each objItem In colLoggedEvents
           Debug.Print objItem.EventCode, objItem.Message, objItem.TimeGenerated
       Next
    
       Set objWMI = Nothing
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle EventViewerAuslesen und klicke auf „Ausführen“.

  5. Ergebnisse ansehen: Öffne das „Direktfenster“ (CTRL + G), um die ausgegebenen Ereignisse zu sehen.


Häufige Fehler und Lösungen

  • Fehler: „Zugriff verweigert“: Stelle sicher, dass du Excel mit Administratorrechten ausführst.
  • Fehler: „Kein Objekt gefunden“: Überprüfe, ob der WMI-Dienst läuft und die richtigen Berechtigungen gesetzt sind.
  • Problem mit Windows Event Log: Wenn keine Einträge angezeigt werden, überprüfe, ob das Event-Log tatsächlich Einträge für die Event Codes 6005 und 6006 enthält.

Alternative Methoden

Wenn du nicht mit VBA arbeiten möchtest, kannst du das Windows Event Log auch manuell auslesen:

  1. Event Viewer öffnen: Suche im Startmenü nach „Event Viewer“.
  2. Logs anzeigen: Navigiere zu „Windows Logs“ > „System“.
  3. Filter anwenden: Rechtsklicke auf „System“ und wähle „Filter Current Log…“. Suche nach Event IDs 6005 und 6006.

Praktische Beispiele

Hier sind zwei einfache Anwendungsmöglichkeiten:

  1. Automatische Zeiterfassung: Mit dem oben genannten VBA-Skript kannst du eine Excel-Tabelle automatisiert mit Logon- und Logoff-Zeiten füllen.
  2. Fehlerprotokollierung: Nutze die Event Viewer Excel-Ausgaben, um Fehlerprotokolle aus dem Windows Error Log zu analysieren und in deiner Excel-Datei darzustellen.

Tipps für Profis

  • Ereignisprotokolle filtern: Verwende zusätzliche Filter in deinem SQL-Query, um spezifischere Daten zu erhalten.
  • Daten analysieren: Nutze Pivot-Tabellen, um die ausgelesenen Excel Event Logs zu analysieren.
  • Automatisierung: Kombiniere diese Lösung mit dem Excel-Automatisierungsprozess, um Daten regelmäßig auszulesen.

FAQ: Häufige Fragen

1. Wie kann ich andere Event-Codes auslesen?
Du kannst die EventCodes in der SQL-Abfrage anpassen, um andere spezifische Ereignisse zu filtern.

2. Ist dies in jeder Excel-Version möglich?
Ja, die VBA-Methode funktioniert in Excel-Versionen ab Excel 2007, solange VBA unterstützt wird.

3. Welche Berechtigungen benötige ich?
Du benötigst Administratorrechte, um auf die Windows Event Logs zuzugreifen und diese auszulesen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige