Rubrik: Word | VB-Versionen: VBA | 05.11.02 |
Einfaches Protokollieren von Dokumentzugriffen Ein Beispiel, wie sich das Öffnen von Dokumenten unter VBA sehr einfach protokollieren lässt. | ||
Autor: Günter | Bewertung: | Views: 19.407 |
www.derhuber.com | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Das nachfolgende Beispiel zeigt, wie sich unter VBA das Öffnen von z.B. Word-Dokumenten sehr einfach protokollieren lässt. Somit lässt sich dann später jederzeit nachvollziehen, wer ein bestimmtes Dokument wann geöffnet hat.
Und so geht's:
- das Worddokument öffnen, dessen Zugriff protokolliert werden soll und die VBA-Umgebung mit ALT+F11 aktivieren
- im Projektfenster den Ordner "Normal" - "Microsoft Word Objekte" öffnen und Doppelklick auf "ThisDocument"
- in das Fenster "Normal - ThisDocument (Code)" den nachfolgenden stehenden Code kopieren
Private Sub Document_Open() Dim sFile As String Dim F As Integer sFile = "D:\Protokoll.txt" F = FreeFile Open sFile For Append As #F Print #F, ActiveDocument.Name; " Geöffnet von "; Application.UserName, Date, Time Close #F Protokoll_Check_Filesize sFile, 128000 End Sub
- Worddokument schliessen und abspeichern
- Worddokument wieder öffnen und jetzt die Datei protokoll.txt öffnen, ansehen, bewundern - Fertig.
Da die Protokoll-Datei bei jedem Zugriff auf das Dokument "wächst", kann man über Protokoll_Check_FileSize die Größe der Protokoll-Datei abfragen, um diese auf eine bestimmte Maximal-Größe zu begrenzen (z.B. max. 128 KB).
Private Sub Protokoll_Check_FileSize( _ 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 ' Aktuelle Größe ermitteln nFileSize = FileLen(sFile) If nFileSize > nMaxSize Then ' Pfad und Dateiname ermitteln sPath = sFile: sName = "" While Right$(sPath, 1) <> "\" And sPath <> "" sName = Right$(sFile, 1) & sName sPath = Left$(sPath, Len(sPath) - 1) Wend ' Extension sExt = "" While Right$(sName, 1) <> "." And sName <> "" sExt = Right$(sName, 1) & sExt sName = Left$(sName, Len(sName) - 1) Wend ' Datei umkopieren! ' Wird ja nur max. einmal pro Tag passieren, ' daher das heutige Datum FileCopy sFile, _ sPath & sName & "_" & Format(Now, "yymmdd") & sExt Kill sFile End If End Sub
Weitere Anwendungsmöglichkeiten wäre beim Schliessen: Private Sub Document_Close(), usw.