• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Read Documentproperties - vraag voor experts

Status
Niet open voor verdere reacties.

Stone52

Gebruiker
Lid geworden
11 dec 2004
Berichten
320
Ik wil in Excel, met een Visual Basic macro, een overzicht maken van alle Office-documenten in een directory met daarbij, per Office-document, een overzicht van de bijbehorende documenteigenschappen (titel, auteur, opmerkingen, enz.).

Het maken van een overzicht van alle aanwezige documenten in een opgegeven directory is geen probleem; het ophalen van de bijbehorende documenteigenschappen (documentproperties) wel.

Ik zoek een oplossing voor de volgende vragen:
1. hoe bepaal ik het type document (Excel, Word, Access, . . . . , . . . . .) van het opgehaalde Office-bestand (ieder type heeft zijn eigen benadering van de eigenschappen)
2. hoe haal ik (per type document) de bijbehorende document eigenschappen op
3. hoe lees ik de eigenschappen zonder het document te openen

Voor de oplossing kan ik geen gebruik maken van “speciale” tools, maar kan ik uitsluitend de mogelijkheden van Visual Basic / Office gebruiken.

Een zoekopdracht op (bv) de directory D:\Work zou het volgende resultaat kunnen opleveren:

D:\Work\Test1.doc auteur: J. Janssen opmerking: versie 2.1
D:\Work\Test2.doc auteur: B. Bruin titel: overzicht werkzaamheden onderwerp: testen opmerking: versie 3.4
D:\Work\Rekenen1.xls auteur: K. Kort onderwerp: uren berekenen opmerking: versie 1.1
 
Stone52

Hier is de code die ik gebruik voor Excel bestanden:

Code:
Sub RemoveCustomAndBuiltInProperties()

'====================================================================
'sources of the code:
    'http://www.mrexcel.com/board2/viewtopic.php?t=51841
    '(http://www.ozgrid.com/News/aug-2005.htm: not used, but useful)
    'code adjusted by Wim Gielis, September 2006
'====================================================================

    Dim mypath As String, myfile As String, team As String, i As Integer
    
    mypath = "C:\Wim"
    myfile = Dir(mypath & Application.PathSeparator & "*.xls", vbDirectory)
    Application.ScreenUpdating = False
    
    Do While myfile <> ""
        If myfile = ThisWorkbook.Name Then GoTo ResumeSub:
        
        Workbooks.Open (mypath & "\" & myfile)
        
        For i = ActiveWorkbook.CustomDocumentProperties.Count To 1 Step -1
            ActiveWorkbook.CustomDocumentProperties.Item(i).Delete
        Next
        
        On Error Resume Next
        
        team = Mid(myfile, 1, Len(myfile) - 4)
        
        With ActiveWorkbook.BuiltinDocumentProperties
            For i = .Count To 1 Step -1
                Select Case .Item(i).Name
                    Case "Title"
                        .Item(i) = team & " 2005-2006"
                    Case "Subject"
                        .Item(i) = "Voetbalbestand voor " & team
                    Case "Author"
                        .Item(i) = "Wim Gielis"
                    Case "Manager"
                        .Item(i) = "Wim Gielis"
                    Case "Company"
                        .Item(i) = "http://www.wimgielis.be"
                    Case "Keywords"
                        .Item(i) = "Voetbal, automatische stand, macro's"
                    Case "Creation date"
                        .Item(i) = "01 sept 2006"
                End Select
            Next
        End With
        
        Workbooks(myfile).Close True
        
ResumeSub:
        myfile = Dir
    
    Loop
    
    Application.ScreenUpdating = True
End Sub

Voer de code eens uit op testbestanden.

De overige bestanden heb ik ook al geprobeerd, maar die zijn niet gelukt. Aan jou de eer om verder te doen en de oplossing te brengen. Ik kijk er al naar uit.

Wigi
 
Laatst bewerkt:
Dit heb ik gevonden :

Sub bestands_eigenschappen()
'Ingrid Baplue
Dim i As Integer
On Error Resume Next
For i = 1 To ThisWorkbook.BuiltinDocumentProperties.Count
Cells(i, 1) = i
Cells(i, 2) = ThisWorkbook.BuiltinDocumentProperties(i).Name
Cells(i, 3) = ThisWorkbook.BuiltinDocumentProperties(i).Value
Next i
End Sub

zie ook : http://www.cpearson.com/excel/docprop.htm

Pierre
 
Laatst bewerkt:
Wigi en Pierre,

Hartelijk dank voor jullie reactie. De door jullie aangedragen mogelijkheden heb ik (eerder al) uitgeprobeerd, maar ik loop er helaas mee vast. De komende week zal ik e.e.a. verder uitproberen. Mochten jullie (of een ander) nog suggesties hebben dan hoor ik dat graag.

Met vriendelijke groet,
Jan.
 
Wigi en Pierre,

Hartelijk dank voor jullie reactie. De door jullie aangedragen mogelijkheden heb ik (eerder al) uitgeprobeerd, maar ik loop er helaas mee vast. De komende week zal ik e.e.a. verder uitproberen. Mochten jullie (of een ander) nog suggesties hebben dan hoor ik dat graag.

Met vriendelijke groet,
Jan.

Jan

ik ken enkel de code voor de Excel bestanden. Je zal het internet moeten afzoeken voor de andere Office bestandstypes.

Lukt het met de Excel bestanden, of niet?

Wigi
 
Wigi,

Ik richt mij eerst op het ophalen van de Excel-documentproperties (Excel 2003), daarna wil ik dat voor de andere Office-file-types doen.
Mocht je (later) nog suggesties hebben dan houd ik mij aanbevolen.

Met vriendelijke groet,
Jan.
 
Mocht je (later) nog suggesties hebben dan houd ik mij aanbevolen.

Niet over de andere bestandstypes, neen. Ik houd me voorlopig enkel met Excel bezig, dat is al meer dan genoeg. ;)

Succes ermee

Wigi
 
Heeft iemand nog suggesties hoe de verschillende file-types te bepalen ?
 
Laatste 3 karakters van de bestandsnaam uitlezen en dan met en IF of CASE statement naar de juiste sub laten springen.

Zoiets als:

Sub bepaaltype()
Dim btype As String
btype = Right(ActiveCell.Value, 3)
Select Case btype
Case "doc"
MsgBox ("Dit is een Wordbestand")
Case "xls"
MsgBox ("Dit is een Excelbestand")
Case "ppt", "pps"
MsgBox ("Dit is een PowerPointbestand")
Case Else
MsgBox ("Dit is een onbekend bestand")
End Select
End Sub

Vervang ActiveCell.Value eventueel door de bestandsnaam.
 
Eigenschappen van files in directory

Ik wil in Excel, met een Visual Basic macro, een overzicht maken van alle Office-documenten in een directory met daarbij, per Office-document, een overzicht van de bijbehorende documenteigenschappen (titel, auteur, opmerkingen, enz.).

Het maken van een overzicht van alle aanwezige documenten in een opgegeven directory is geen probleem; het ophalen van de bijbehorende documenteigenschappen (documentproperties) wel.

Ik zoek een oplossing voor de volgende vragen:
1. hoe bepaal ik het type document (Excel, Word, Access, . . . . , . . . . .) van het opgehaalde Office-bestand (ieder type heeft zijn eigen benadering van de eigenschappen)
2. hoe haal ik (per type document) de bijbehorende document eigenschappen op
3. hoe lees ik de eigenschappen zonder het document te openen

Voor de oplossing kan ik geen gebruik maken van “speciale” tools, maar kan ik uitsluitend de mogelijkheden van Visual Basic / Office gebruiken.

Een zoekopdracht op (bv) de directory D:\Work zou het volgende resultaat kunnen opleveren:

D:\Work\Test1.doc auteur: J. Janssen opmerking: versie 2.1
D:\Work\Test2.doc auteur: B. Bruin titel: overzicht werkzaamheden onderwerp: testen opmerking: versie 3.4
D:\Work\Rekenen1.xls auteur: K. Kort onderwerp: uren berekenen opmerking: versie 1.1
Zet volgende code in een module (voor excel 2000 en volgende) :
Option Explicit

Public Function SetSummaryInfo()
Dim arrHeaders(50)
Dim objShell, objFolder, i, strFileName
Dim startrow As Long
Dim startcolumnheader As Long

Set objShell = CreateObject("Shell.Application")
'c:\data is de directory die moet worden nagekeken
Set objFolder = objShell.Namespace("C:\Data")

startrow = 2
startcolumnheader = 1

For i = 0 To 50
arrHeaders(i) = objFolder.GetDetailsOf(objFolder.Items, i)
Cells(1, startcolumnheader).Value = arrHeaders(i)
startcolumnheader = startcolumnheader + 1
Next

For Each strFileName In objFolder.Items
startcolumnheader = 1
For i = 0 To 50
Cells(startrow, startcolumnheader).Value = i & "-" & arrHeaders(i) & ": " & objFolder.GetDetailsOf(strFileName, i)
startcolumnheader = startcolumnheader + 1
Next
startrow = startrow + 1
Next

Columns("a:az").Columns.AutoFit

End Function

Sub read_file_info()
SetSummaryInfo
End Sub

Dan uitvoeren macro's en kies read_file_info. Hopelijk geeft deze zelf ineengeknutselde macro nieuwe ideeën.

Charlize
 
Jan en Charlize,

Hartelijk dank voor jullie reactie. Dit heeft mij weer een flinke stap verder geholpen.
Ik heb de oplossingen ondertussen gecombineerd met mijn eigen oplossing.

Ik zou nog graag de volgende vraag beantwoord willen hebben:
hoe lees ik de op te halen files "read-only" (zodat ik niet bij beeindigen de vraag krijg of ik een van de gelezen files wil "saven")
 
Charlize,


Bij jouw oplossing loop ik tegen iets merkwaardigs aan. Als voorbeeld: in een aantal documenten is het veld (property) Company/Bedrijf gevuld. Toch geeft jouw macro een leeg veld voor Company/Bedrijf terug. Enig idee wat de oorzaak hiervan is ?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan