Trying to use Excel VBA to capture all the file attributes from files on disk, including extended attributes. Was able to get it to loop through the files and capture the basic attributes (that come from the file system):
Would also like to capture the extended properties that come from the file itself:
And other properties which are visible when right clicking on the file.
The goal is to create a detailed list of all the files on a file server.
VBA FreeFile is a function that is categorized under the VBA function, which allows the system to reserve a number for the next file to be opened under VBA File Input Output for a smooth coding experience and reducing unnecessary bugs in your code.
A property is an attribute of an object that defines one of the object's characteristics, such as size, color, or screen location, or an aspect of its behavior, such as whether it is enabled or visible. To change the characteristics of an object, you change the values of its properties.
You say loop .. so if you want to do this for a dir instead of the current document;
Dim sFile As Variant Dim oShell: Set oShell = CreateObject("Shell.Application") Dim oDir: Set oDir = oShell.Namespace("c:\foo") For Each sFile In oDir.Items Debug.Print oDir.GetDetailsOf(sFile, XXX) Next
Where XXX is an attribute column index, 9 for Author for example. To list available indexes for your reference you can replace the for loop with;
for i = 0 To 40 debug.? i, oDir.GetDetailsOf(oDir.Items, i) Next
Quickly for a single file/attribute:
Const PROP_COMPUTER As Long = 56 With CreateObject("Shell.Application").Namespace("C:\HOSTDIRECTORY") MsgBox .GetDetailsOf(.Items.Item("FILE.NAME"), PROP_COMPUTER) End With
You can get this with .BuiltInDocmementProperties
.
For example:
Public Sub PrintDocumentProperties() Dim oApp As New Excel.Application Dim oWB As Workbook Set oWB = ActiveWorkbook Dim title As String title = oWB.BuiltinDocumentProperties("Title") Dim lastauthor As String lastauthor = oWB.BuiltinDocumentProperties("Last Author") Debug.Print title Debug.Print lastauthor End Sub
See this page for all the fields you can access with this: http://msdn.microsoft.com/en-us/library/bb220896.aspx
If you're trying to do this outside of the client (i.e. with Excel closed and running code from, say, a .NET program), you need to use DSOFile.dll.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With