Protokollieren von Zugriffen auf Dokumente

Arbeiten mehrere Leute an einem oder mehreren  Word Dokumenten, kann es hilfreich sein, dass die Zugriffe auf die Dokumente protokolliert werden. Dieses Protokollieren der Zugriffe kann über VBA gelöst werden. Hierzu werden in eine einfache Textdatei der Dateiname, der Benutzername, Datum und Uhrzeit gespeichert. Da diese Protokolldatei mit der Zeit wächst, wird noch zusätzlich eine Größenkontrolle mit eingebaut. Nun aber zum produktiven Teil dieses Artikels.

Aufbau und Programmierung

Willst Du die Protokollierung nur für eine Datei einschalten, dann öffne das entsprechende Dokument. Danach öffne den Visual Basic Editor mit der Tastenkombination ALT+F11. Im linken Teil des Fensters siehst Du unter Projekte Dein Word Dokument Namen in Klammern, wie das folgende Bild zeigt: (z.B. Secret-Doc)
Word Protokollieren VBA

Führe nun noch einen Doppelklick auf ThisDocument aus, so wie im oberen Bild. Dann erhält Du ein leeres Eingabefenster. Als erstes füge die folgende private Funktion Document_Open hinzu :

Private Sub Document_Open()
  Dim sFile As String
  Dim F As Integer
 
  sFile = "X:\Protokolle\Protokoll.txt"
  F = FreeFile
  Open sFile For Append As #F
  Print #F, ActiveDocument.Name, "Geöffnet von "; Application.UserName, Date, Time
  Close #F
 
  CheckFileSize sFile, 256000
End Sub

Nun diese Funktion Document_Open wird immer beim Öffnen des Dokumentes aufgerufen. Die Protokolldatei wird in dem Pfad X:\Protokolle unter dem Namen Protokoll.txt abgelegt. Bei der Auswahl des Pfades muss drauf achten, dass jeder Anwender schreibend Zugriff hat. Die Zeile mit dem Befehl Print schreibt die Infos in die Protokolldatei. Eine Zeile in der Protokolldatei kann zum Beispiel so aussehen :

Secret-Doc-Protocol.docm    Geöffnet von Rolf Warnecke    22.09.2017    18:21:18

Der aufmerksame Leser hat festgestellt, dass ich das Word Dokument mit Makros abgespeichert habe. Also mit der Dateiendung docm. Die Zeile mit dem Befehl CheckFileSize überprüft die Größe der Protokolldatei. Hier dazu der entsprechende Quelltext :

Private Sub CheckFileSize( _
  ByVal sFile As String, ByVal nMaxSize As Long)
 
  Dim nFileSize As Long
  Dim sName As String
  Dim sExt As String
  Dim sPath As String
 
  On Error Resume Next
 
  nFileSize = FileLen(sFile)
 
  If nFileSize > nMaxSize Then
    sPath = Left(sFile, InStrRev(sFile, "\"))
    sName = Right(sFile, Len(sFile) - InStrRev(sFile, "\"))
    sExt = Right(sFile, Len(sFile) - InStrRev(sFile, "."))
    sName = Left(sName, InStrRev(sName, ".") - 1)
 
    FileCopy sFile, _
      sPath & sName & "_" & Format(Now, "yyyy-mm-dd") & "." & sExt
    Kill sFile
  End If
End Sub

Der erste Parameter der Funktion übergibt den kompletten Dateipfad inkl. Dateinamen. Der zweite Parameter enthält die zu überprüfende Dateigröße in Bytes. In diesem Beispiel sind das 256.000 Bytes. Das entspricht 256KB. Bei diesem Beispiel sollte nur einmal pro Tag eine neue Datei angelegt werden.

Voraussetzung für diese Art von Protokollierung ist, dass die Makros aktiviert sind. Sind die Makros nicht aktiviert oder werden von der Grundeinstellung her blockiert, dann wird auch nichts protokolliert. Willst Du, dass die Protokollierung immer durchgeführt wird, dann musst Du den gleichen Quelltext in den Teil ThisDocument im Projekt Normal einfügen und speichern. Dann wird jedes Öffnen eines Dokumentes, egal ob neu oder bestehend, mit protokolliert.

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert