Dateieigenschaften mit VBA auslesen und vergleichen
Schritt-für-Schritt-Anleitung
Um die Dateieigenschaften mit VBA auszulesen, kannst du den folgenden VBA-Code verwenden. Dieser Code prüft die Version einer Datei auf deinem Server im Vergleich zur aktuellen Datei:
Option Explicit
Sub auto_open()
' Konstanten und Variablen definieren
Const STRFOLDER As String = "\\server\pfad" ' Pfad zu den aktuellen Dateien
Const STRFILE As String = "datei.xlsm" ' Dateiname
Dim objShell, objFolder, objFile As Object ' Pfad- und Dateiobjekte
Dim fltVersionNeu, fltVersionAktuell As Integer ' Versionsnummern
Dim strKommentarNeu As String ' Neuerungen in aktueller Version
Dim Antwort As Integer ' Rückgabewert von Messageboxen
' Prüfen, ob Serverdatei gelesen werden kann
If Dir(STRFOLDER & "\" & STRFILE, 16) = "" Then
' Serverdatei kann nicht gelesen werden -> Script beenden
Exit Sub
End If
' Variablen zuweisen
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(STRFOLDER)
Set objFile = objFolder.ParseName(STRFILE)
' Versionsinformationen auslesen
fltVersionAktuell = ActiveWorkbook.BuiltinDocumentProperties(18)
fltVersionNeu = objFolder.GetDetailsOf(objFile, 12)
' Prüfen, ob aktuelle Datei eine andere Versionsnummer hat als die Datei auf dem Server
If fltVersionAktuell <> fltVersionNeu Then
Antwort = MsgBox("Ungültige Versionsnummer.", 276, "Versionshinweis")
End If
' Datei wieder schließen, falls Antwort NEIN geklickt wurde
If Antwort = vbNo Then
ActiveWorkbook.Close
Exit Sub
End If
End Sub
Dieser Code funktioniert in Excel unter Windows XP und Windows 7, beachte jedoch, dass sich die Position der Dateieigenschaften je nach Betriebssystem ändern kann.
Häufige Fehler und Lösungen
-
Leere Werte bei Dateieigenschaften: Wenn du unter Windows 7 die Dateieigenschaften ausliest und diese leer sind, kann das an den unterschiedlichen Positionen der Eigenschaften liegen. Du kannst die Property-Nummern überprüfen oder die Namen verwenden (wie „Category“ und „Comments“).
-
Typen unverträglich: Bei der Verwendung von GetDetailsOf
kann der Fehler "Typen unverträglich" auftreten, wenn du versuchst, die Eigenschaften mit einem String auszulesen. Stelle sicher, dass du die richtigen Long-Werte verwendest.
Alternative Methoden
Eine effektive Methode, die ohne das Öffnen der Datei auskommt, ist das Erstellen einer versteckten Tabelle in beiden Dateien. In der Serverdatei kannst du die Versionsnummer in eine Zelle schreiben und dann auf diese Zelle verweisen:
='\\server\pfad\[datei.xlsm]Info'!$A$1
Diese Methode ermöglicht dir den Zugriff auf die Versionsnummer, ohne die Datei zu öffnen.
Praktische Beispiele
Hier sind einige praktische Beispiele, wie du die Dateieigenschaften auslesen kannst:
- Um die Kategorie und Kommentare einer geöffneten Datei auszulesen, kannst du diesen Code verwenden:
Debug.Print ActiveWorkbook.BuiltinDocumentProperties("Category")
Debug.Print ActiveWorkbook.BuiltinDocumentProperties("Comments")
- Wenn du eine temporäre Datei zur Überprüfung der Dateieigenschaften anlegen möchtest, kannst du dies über die Shell-Objekte tun, um sicherzustellen, dass die Eigenschaften für verschiedene Windows-Versionen korrekt ausgelesen werden.
Tipps für Profis
- Nutze die
Debug.Print
-Methode, um schnell zu testen, ob deine Abfragen die gewünschten Ergebnisse liefern.
- Achte darauf, die richtigen Indizes für die
GetDetailsOf
-Methode zu verwenden, die je nach Windows-Version variieren können.
- Überlege dir die Verwendung von temporären Dateien, um die Dateieigenschaften zu sichern, besonders wenn du mit unterschiedlichen Excel-Versionen arbeitest.
FAQ: Häufige Fragen
1. Warum funktionieren die Dateieigenschaften nicht unter Windows 7?
Die Position der Dateieigenschaften kann von Windows-Version zu Windows-Version unterschiedlich sein, was dazu führt, dass der Zugriff auf die Werte fehlschlägt.
2. Kann ich die Namen der Eigenschaften statt der Indizes verwenden?
Ja, aber stelle sicher, dass du in den Fällen, wo die Eigenschaften über GetDetailsOf
abgerufen werden, die Indizes verwendest, da diese Methode keine Strings akzeptiert.
3. Gibt es eine Möglichkeit, Daten aus einer geschlossenen Datei auszulesen?
Ja, du kannst eine versteckte Tabelle in der Datei erstellen, um die benötigten Werte abzuleiten, ohne die Datei zu öffnen.