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)
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.