Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1104to1108
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Dokumenteigenschaften auslesen

Dokumenteigenschaften auslesen
André
Moin zusammen,
ich habe mehrere größere Exceltabellen, die von verschiedenen Mitarbeitern im Unternehmen verwendet werden. Es ist notwendig, daß jeder Mitarbeiter seine eigene Kopie der jeweiligen Datei hat, es kann also nicht mit zentral auf dem Server abgelegten Dateien gearbeitet werden.
Nun möchte ich in meine Dateien eine kleine Versionsverwaltung einbauen, um zu verhindern, daß die Leute mit alten Versionen der Dateien arbeiten.
Dazu habe ich in den Dateieigenschaften im Feld "Version" die Versionsnummer abgelegt. Die jeweils aktuellste Version der einzelnen Dateien lege ich auf einem Server ab, von dem sich die verschiedenen Leute die Dateien holen können.
Damit auch jeder mitkriegt, wenn eine neue Version einer Datei existiert, soll das automatisch per Makro geprüft werden. Bei jedem Öffnen einer Datei soll dieses Makro die Versionsnummer in den eigenen Dateieigenschaften vergleichen mit der Versionsnummer der Datei auf dem Server und ggf. einen Hinweis ausgeben.
Mit folgendem kleinen Script habe ich es schon geschafft, die Eigenschaften einer anderen Datei richtig auszulesen. Allerdings habe ich dabei ein Problem: Die Datei wird hierzu vollständig geöffnet, was aufgrund der Dateigrößen teilweise sehr lange dauert.

Sub EigenschaftenAuslesen()
Dim objDatei As Object, strDateiname As String
strDateiname = "\\server\pfad\datei.xlsm"
Set objDatei = GetObject(strDateiname)
MsgBox objDatei.BuiltinDocumentProperties.Item(8)
objDatei.Close False
Set objDatei = Nothing
End Sub
Nun meine Frage: gibt es eine Möglichkeit, die Dateieigenschaften einer anderen Datei auszulesen, OHNE diese vollständig zu öffnen? Gehen müsste das, denn der Windows-Explorer kann diese Infos ja auch zeigen, ohne die Datei zu öffnen. Immerhin gebe ich den Wert in das Versionsfeld ja im WindowsExplorer ein.
Danke für eure Hilfe.
Gruß André

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Dokumenteigenschaften auslesen
06.10.2009 23:03:26
Daniel
Hi
such mal im Archiv nach "Dateieigenschaften auslesen", schon im ersten Treffer wird eine Methode beschreiben.
allerdings werden hier alle Dateien eines Ordners abgefragt, ggf müsstest du das etwas ergänzen.
einfacher wäre es allerdings, wenn du die Versionsnummer im Dateinamen hinterlegst, dann könntest du einfach mit der DIR()-Funktion prüfen, ob eine neuere Datei vorliegt:
if Dir("\\server\pfad\datei V2.xlsm") ="" then msgbox "Neue Version liegt vor"

die Meldung poppt hoch, wenn du die Datei auf dem Server in "datei V3.xlsm" umbenennst.
eine andere Methode wäre, das Erstellungsdatum der Datei in einer konstanten zu Speichern und mit dem letzten Speicherdatum der Serverdatei abzugleichen, das geht über die Funktion FILEDATETIME(vollständigerDateiname)
if erstelldatum 
dies geht aber auch nur, wenn mit der Serverdatei nicht gearbeitet wird und diese nur zum Versionswechsel dort gespeichert wird, da FileDateTime das Datum der letzten Änderung liefert, wenn die Datei geöffnet ist, sogar das aktuelle Datum)
Gruß, Daniel
Anzeige
AW: Dokumenteigenschaften auslesen
08.10.2009 09:29:22
André
Moin Daniel,
danke für den Tip. Über die Suche habe ich folgendes Script gefunden:
Option Explicit
Sub Dateieigenschaften()
Const STRFOLDER As String = "C:\Eigene Dateien"
Dim objShell As Object, objFolder As Object
Dim x As Byte, intColumn As Integer, lngRow As Long
Dim varName, arrHeaders(34)
If Dir(STRFOLDER, 16) = "" Then
MsgBox "Der Ordner " & STRFOLDER & " wurde nicht gefunden!" & Space(10), 64, "weise hin..."
Exit Sub
End If
Application.ScreenUpdating = False
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(STRFOLDER)
intColumn = 1
For x = 0 To 33
arrHeaders(x) = objFolder.GetDetailsOf(varName, x)
Cells(1, intColumn + x) = arrHeaders(x)
Next
Rows(1).Font.Bold = True
lngRow = 2
For Each varName In objFolder.Items
For x = 0 To 33
Cells(lngRow, intColumn + x) = objFolder.GetDetailsOf(varName, x)
Next
lngRow = lngRow + 1
Next
Columns.AutoFit
Application.ScreenUpdating = True
End Sub
Das funktioniert auch wunderbar, wenn ich die Eigenschaften aller Dateien eines Verzeichnisses auflisten will. Mir gelingt es aber partout nicht, die Eigenschaften einer einzelnen Datei so auszulesen.
Folgendes habe ich probiert:
Sub EigenschaftenAuslesen()
Const STRFOLDER As String = "\\server\pfad" 'anpassen
Dim objShell As Object
Dim objFolder As Object
Dim x As Byte
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(STRFOLDER)
For x = 0 To 41
Cells(x + 1, 1).Value = objFolder.GetDetailsOf("datei.xlsx", x)
Next x
End Sub

Damit werden aber nicht die Werte, sondern die Bezeichnungen der Eigenschaften aufgelistet. Wie kann ich die Werte der Eigenschaften auflisten lassen?
Gruß, André
Anzeige
AW: Dokumenteigenschaften auslesen
08.10.2009 13:59:29
André
Moin zusammen,
ich antworte mir jetzt mal selber, weil ich die Lösung für mein Problem gefunden habe. Mit nachfolgendem Script funktioniert es wunderbar. Es vergleicht bei jedem Öffnen einer Datei (in der dieses Script eingebunden ist) diese mit einer zweiten Datei in einem Serververzeichnis. Falls die Datei auf dem Server neuer ist (Versionsnummer), dann wird eine entsprechende Meldung ausgegeben.
Leider ist es mir nicht gelungen, das Feld "Version auszulesen", deshalb habe ich die Versionsnummer im Feld "Kategorie" abgelegt. Die Versionsnummer ist übrigens ganz simpel eine Integer-Zahl.
Zusätzlich blende ich, wenn die Versionsmeldung ausgegeben wird, den Inhalt des Kommentarfeldes mit ein, in dem ich die Änderungen/Neuerungen in der aktuellen Datei beschreibe.
So, hier ist mein kleines Script, vielleicht kann es ja jemand gebrauchen. Verbesserungsvorschläge werden immer gerne angenommen:

Sub auto_open()
' Konstanten und Variablen definieren
Const STRFOLDER As String = "\\server\pfad"     ' Pfad zu den neuen Dateien
Const STRFILE As String = "datei.xlsm"          ' Dateiname der Datei auf dem Server
Dim objShell, objFolder, objFile As Object      ' Pfad- und Dateiobjekte
Dim fltVersionNeu, fltVersionAktuell As Integer ' Versionsnummern
Dim strKommentarNeu As String                   ' Neuerungen in neuer Version
Dim Antwort                                     ' 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) ' aktuell offene Datei
fltVersionNeu = objFolder.GetDetailsOf(objFile, 12)              ' Server-Datei
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("FEHLER!" & Chr(13) & Chr(13) & _
"Die aktuelle Datei hat eine ungültige Versionsnummer." & _
Chr(13) & Chr(13) & _
"Bitte kopiere die gültige Version von " & Chr(13) & _
"\\server\pfad" & Chr(13) & _
"in Dein Arbeitsverzeichnis." & Chr(13) & Chr(13) & _
"Willst Du die aktuelle Datei trotzdem benutzen?", 276)
End If
' Datei wieder schließen, falls Antwort NEIN geklickt wurde
If Antwort = vbNo Then
ActiveWorkbook.Close
Exit Sub
End If
End Sub

Gruß, André
Anzeige
AW: Danke, daß du deine Lösung
09.10.2009 00:47:45
Daniel
hier hochgeladen hast.
wie bist du auf das "Set objFile = objFolder.ParseName(STRFILE)" gekommen?
hast du irgendwo eine Beschreibung dazu gefunden und wenn ja, wo?
Gruß, Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige