Anzeige
Archiv - Navigation
1068to1072
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Schlüsselwörter/Keywords aus Office 2007 auslesen

Schlüsselwörter/Keywords aus Office 2007 auslesen
23.04.2009 08:18:59
Matthias
Guten Morgen zusammen
Ich habe eine Excel-Datei mit dem Befehl "Vorbereiten, Eigenschaften" mit zwei Schlüsselwörter abgespeichert (diese Schlüsselwörter zeigt mir der Windows Explorer an, wenn ich draufklick. In der englischen Version wird der Name "Tags" verwendet - in VBA jedoch "Keywords").
Code zum speichern:
Set Export_Datei = Workbooks.Add
With Export_Datei
.Title = "Tool"
.Keywords = "Vorname Name"
End With
Nun durchsuche ich mit dem Befehl FSO den Ordner wo sich diese Datei drin befindet und möchte in einem Form die entsprechenden Keywords zum File anzeigen lassen.
Auszug aus dem Code:
Set Folder = FSO.GetFolder(sPath)
If Dir(sPath & sFileToSearchFor) UNGLEICH "" Then
' Datei im Ordner gefunden
' -- Pfad in die AuswahlBox eintragen
fAuswahl.AddItem sPath
End If
Nun müsste ich statt sPath z.B. Keywords eingeben können. Natürlich funktioniert das nicht so einfach. Ich finde jedoch nicht heraus, wie und ob überhaupt dieses Auslesen der Schlüsselwörter möglich ist.
Weiss das ein Profi von euch?
Vielen Dank für eure Hilfe und liebe Grüsse
Matthias

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

Betreff
Datum
Anwender
Anzeige
AW: Schlüsselwörter/Keywords aus Office 2007 auslesen
23.04.2009 09:54:52
Nepumuk
Hallo Matthias,
mit folgendem Beispiel kannst du alle Eigenschaften aller Dateien in einem Ordner auslesen:
Public Sub Dateieigenschaften()
    'von K.Rola
    Const STRFOLDER As String = "C:\Testordner\"
    Dim objShell As Object, objFolder As Object
    Dim intIndex As Integer, intColumn As Integer, lngRow As Long
    Dim varName
    If Dir(STRFOLDER, 16) = "" Then
        MsgBox "Der Ordner " & STRFOLDER & " wurde nicht gefunden!", 64, "Hinweis"
        Exit Sub
    End If
    Application.ScreenUpdating = False
    Cells.Clear
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(STRFOLDER)
    intColumn = 1
    For intIndex = 0 To 300
        Cells(1, intColumn + intIndex) = objFolder.GetDetailsOf(varName, intIndex)
    Next
    Rows(1).Font.Bold = True
    lngRow = 2
    For Each varName In objFolder.Items
        For intIndex = 0 To 300
            Cells(lngRow, intColumn + intIndex) = objFolder.GetDetailsOf(varName, intIndex)
        Next
        lngRow = lngRow + 1
    Next
    Columns.AutoFit
    Application.ScreenUpdating = True
End Sub

Mit folgendem Beispiel eine bestimmte Eigenschaft einer Datei:
Public Sub Beispiel()
    
    Const FILE_FOLDER = "C:\Testordner\"
    Const FILE_PROPERTY = "Markierungen"
    Const FILE_NAME = "Mappe1.xlsx"
    Const MAX_PROPERTYS = 300
    
    Dim objShell As Object, objFolder As Object
    Dim lngIndex As Long, lngPosition As Long
    
    ' initialize errorhandler
    On Error GoTo error_exit
    
    ' verify folder exit
    If Dir$(FILE_FOLDER, vbDirectory) = "" Then _
        Err.Raise Number:=vbObjectError, Description:= _
        "Ordner ''" & FILE_FOLDER & "'' nicht gefunden."
    
    ' create object
    Set objShell = CreateObject(Class:="Shell.Application")
    
    ' set reverence to folder
    Set objFolder = objShell.Namespace((FILE_FOLDER))
    
    ' search position of fileproperty
    For lngIndex = 0 To MAX_PROPERTYS
        If Trim$(objFolder.GetDetailsOf("", lngIndex)) <> "" Then
            If Cbool(InStr(FILE_PROPERTY, objFolder.GetDetailsOf("", lngIndex))) Then
                lngPosition = lngIndex
                Exit For
            End If
        End If
    Next
    
    ' property not found - trigger an error
    If lngPosition = 0 Then _
        Err.Raise Number:=vbObjectError, Description:="Dateieigenschaft ''" & _
        FILE_PROPERTY & "'' nicht gefunden."
    
    ' write filename and property to table
    With Tabelle1
        .Cells(1, 1).Value = FILE_NAME
        .Cells(1, 2).Value = objFolder.GetDetailsOf( _
            objFolder.ParseName(FILE_NAME), lngPosition)
    End With
    
    Tabelle1.Columns.AutoFit
    
    sub_exit:
    
    ' clear objects
    Set objShell = Nothing
    Set objFolder = Nothing
    
    Exit Sub
    
    error_exit:
    
    ' show errormessage
    MsgBox "Fehler: " & CStr(Err.Number) & vbLf & vbLf & _
        Err.Description, vbCritical, "Fehler"
    Resume sub_exit
    
End Sub

Aber, sobald eine Datei im Excel2007er Format (xlsx / xlsm) mit einem Lese- Schreibschutzkennwort versehen ist, kannst du sie nicht mehr auslesen.
Die Bezeichnungen in Excel, und im Explorer stimmen nicht überein. Du musst die Bezeichnungen benutzen, welche das 1. Beispiel in Zeile 1 schreibt. Und du kannst auch nicht nach der Position gehen, die ist nämlich von der Installation zusätzlicher Software, welche eigene Eigenschaften im Explorer einträgt, abhängig.
Gruß
Nepumuk
Anzeige
AW: Schlüsselwörter/Keywords aus Office 2007 auslesen
23.04.2009 10:15:41
Matthias
Absolut genial, ganz herzlichen Dank Nepumuk!!
Nachfrage@Nepumuk
23.04.2009 11:32:05
Rudi
Hallo,
geht Dateieigenschaften nur mit einer Konstanten als Ordner?
Wenn ich mir den Ordner über den FileDialog hole, ist objFolder Nothing (auch mit Anhängen von \), obwohl der Ordnername identisch ist.
Hast du eine Erklärung?
Gruß
Rudi
offen owT
23.04.2009 11:32:58
Rudi
AW: offen owT
23.04.2009 12:00:31
Nepumuk
Hallo Rudi,
da bin ich auch schon mal fast verzweifelt. Bis ich mir die Methode näher angesehen habe. Die erwartet einen Variant:
Function NameSpace(vDir) As Folder
Element von Shell32.Shell
Get special folder from ShellSpecialFolderConstants
Warum es aber mit einer String-Konstante geht und mit einer String-Variable nicht, habe ich auch nicht verstanden (it's magic) ;-)
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Sub Dateieigenschaften()
    Dim objShell As Object, objFolder As Object
    Dim vntVariable As Variant
    Dim strVariable As String
    
    vntVariable = ThisWorkbook.Path
    strVariable = ThisWorkbook.Path
    
    Set objShell = CreateObject("Shell.Application")
    
    Set objFolder = objShell.Namespace(vntVariable) 'geht
    
    MsgBox objFolder Is Nothing
    
    Set objFolder = Nothing
    
    Set objFolder = objShell.Namespace(strVariable) 'geht nicht
    
    MsgBox objFolder Is Nothing
    
    Set objFolder = Nothing
    
    Set objFolder = objShell.Namespace((strVariable)) 'geht da Konvertierung erzwungen
    
    MsgBox objFolder Is Nothing
    
    Set objShell = Nothing
    Set objFolder = Nothing
End Sub

Gruß
Nepumuk
Anzeige
AW: offen owT
23.04.2009 12:27:57
Rudi
Hallo,
herzlichen Dank.
Da soll man drauf kommen.
Gruß
Rudi

168 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige