Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using VBA to get extended file attributes

Tags:

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):

  • File Path
  • File Name
  • File Size
  • Date Created
  • Date Last Accessed
  • Date Last Modified
  • File Type

Would also like to capture the extended properties that come from the file itself:

  • Author
  • Keywords
  • Comments
  • Last Author
  • Category
  • Subject

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.

like image 276
Jim McKeeth Avatar asked Apr 13 '11 15:04

Jim McKeeth


People also ask

What is FreeFile in VBA?

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.

What are attributes of an object in VBA?

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.


2 Answers

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 
like image 92
Alex K. Avatar answered Oct 12 '22 16:10

Alex K.


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.

like image 34
Todd Main Avatar answered Oct 12 '22 16:10

Todd Main