Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA: Auslesen der Dateieigenschaften
André
Moin zusammen,
in vielen Dateien frage ich die Dateieigenschaften im auto_open() ab. Der Grund: ich vergleiche einen Eintrag in den Dateieigenschaften mit demselben Eintrag einer Datei auf dem Server. Ist er nicht gleich, dann liegt auf dem Server eine neuere Version der Datei und ich bekomme einen entsprechenden Hinweis.
Hierzu benutze ich die Eigenschaft "Kategorien", in die ich einfach eine Zahl als Versionsnummer eintrage. Abgefragt wird diese Eigenschaft so:
fltVersionAktuell = ActiveWorkbook.BuiltinDocumentProperties(18)

Bisher hat das auch wunderbar funktioniert, unter Window XP. Nun habe ich Windows 7 installiert, und es funktioniert nicht mehr. Mittlerweile habe ich auch herausgefunden, warum:
Solange die Datei in Excel nicht geöffnet ist, steht die Versionsnummer in der Eigenschaft "Kategorien". In dem Moment, in dem Excel die Datei öffnet, ist diese Eigenschaft allerdings leer. Also liest mein Script natürlich den falschen (leeren) Wert.
Richtig komisch ist: wenn ich die Datei wieder schließe (mit oder ohne speichern), dann steht in der Dateieigenschaft wieder der korrekte Wert.
Kennt jemand dieses Phänomen, und weiß vielleicht, was ich dagegen tun kann?
Falls nicht, welche Alternativen könnt ihr mir vorschlagen, um eine Datei mit einer anderen zu vergleichen? Dabei sind folgende Bedingungen zu erfüllen:
1. die zweite Datei darf NICHT in Excel geöffnet werden
2. das Dateidatum und die Dateigröße reichen mir nicht für den Vergleich aus
Gruß, André

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA: Auslesen der Dateieigenschaften
20.11.2009 15:01:42
André
Nochmal Moin,
ich habe nun noch ein wenig nachgeforscht und dabei herausbekommen, daßder Fehler doch noch etwas anders ist. Tatsächlich liest Excel die Dateieigenschaften der aktuelle geöffneten Datei richtig aus. Falsch ist aber, was aus der Datei aus dem Server ausgelesen wird.
Hier nochmal das Script, mit dem ich das mache:
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)
strKommentarNeu = objFolder.GetDetailsOf(objFile, 14)
' Prüfen, ob aktuelle Datei eine andere Versionsnummer hat als die Datei auf dem Server
If fltVersionAktuell  fltVersionNeu Then
' auf dem Server liegt eine ältere Datei vor. Dies darf eigentlich nicht vorkommen
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
Der Witz ist nun, wenn ich dieses Script in einem Excel unter Windows XP starte, dann sind die Eigenschaften 12 und 14 mit den Feldern "Kategorien" und "Kommentare" gefüllt.
Rufe ich die selbe Datei aber unter Windows 7 auf, dann sind diese beiden Werte leer. Statt dessen sind in den Felder 23 und 24 nun die Werte aus "Kategorien" und "Kommentare".
Wäre toll, wenn jemand eine Idee für mich hätte.
Dazu noch eine Frage: ist es möglich, per VBA den Wert einer bestimmten Zelle einer anderen Datei auszulesen, OHNE daß diese andere Datei dafür geöffnet werden muß?
Gruß, André
Anzeige
AW: VBA: Auslesen der Dateieigenschaften
20.11.2009 15:58:40
Uwe
Hallo André,
hast Du schon probiert, statt der Nummern die Namen zu verwenden?

Debug.Print ActiveWorkbook.BuiltinDocumentProperties("Category")
Debug.Print ActiveWorkbook.BuiltinDocumentProperties("Comments")

Zur 2. Frage:
Lege doch in beiden Mappen eine versteckte Tabelle an, z.B. "Info".
In der Severdatei steht dann z.B. in A1 die Version.
In der abzufragenden Datei dann ein ganz simpler Bezug auf die ServerDatei:
='\\server\pfad\[datei.xlsm]Info'!$A$1
Gruß Uwe
AW: VBA: Auslesen der Dateieigenschaften
20.11.2009 16:09:57
André
Moin Uwe,
kann ich denn die Namen auch bei der Abfrage der externen Datei verwenden?
Dies hier führt immer zu einem Fehler "Typen unverträglich":
fltVersionNeu = objFolder.GetDetailsOf(objFile, "Category")
Den Verweis auf eine Zelle in der externen Datei kann ich deshalb nicht verwenden, weil dadurch die externe Datei geöffnet würde, um den Wert zu aktualisieren. Und das ist eben eine Bedingung bei meiner Anwendung, daß die Datei auf dem Server nicht geöffnet wird.
Gruß, André
Anzeige
Stimmt, ...
20.11.2009 17:06:35
Uwe
Hallo André,
stimmt, ein String geht leider nicht. GetDetailsOf verlangt einen Long.
Aber wieso wird bei einem Formelbezug die Externe Datei geöffnet?
Gruß Uwe
AW: VBA: Auslesen der Dateieigenschaften
20.11.2009 18:38:55
Nepumuk
Hallo,
die Position einer Dateieigenschaft ist a vom Betriebssystem und b von zusätzlichen Installationen abhängig. Ich mache das so, dass ich erst eine temporäre Datei anlege, dort die per Shell-Objekt lebaren Eigenschaften reinschreibe (sind nur 4) und dann per Shell die Postition auslese. Das ganze daurt zwar rund eine Sekunde, aber dafür können meine Kunden installieren was sie wollen und auch jedes Windows-Betriebssystem benutzen das es gibt, ich finde die Einträge garantiert.
Gruß
Nepumuk
Anzeige
AW: VBA: Auslesen der Dateieigenschaften
23.11.2009 08:29:41
André
Moin Nepumuk,
so richtig verstehe ich nicht, wie Du das meinst.
Die Datei, die ich gerade öffne, soll doch nichts in die Datei auf dem Server reinschreiben. Sie soll aus der Serverdatei nur eine Eigenschaft auslesen, um festzustellen, ob diese Eigenschaft einen entpsrechenden Wert hat.
Leider bin ich mit meinem Problem noch nicht wirklich weiter.
Gruß, André

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige