Usando VBA para obtener atributos de archivos extendidos
file-attributes fso (3)
Dice loop .. así que si quiere hacer esto para un directorio en lugar del documento actual;
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
Donde XXX es un índice de columna de atribución, 9 para Autor, por ejemplo. Para enumerar los índices disponibles para su referencia, puede reemplazar el bucle for con;
for i = 0 To 40
debug.? i, oDir.GetDetailsOf(oDir.Items, i)
Next
Rápidamente para un solo archivo / atributo:
Const PROP_COMPUTER As Long = 56
With CreateObject("Shell.Application").Namespace("C:/HOSTDIRECTORY")
MsgBox .GetDetailsOf(.Items.Item("FILE.NAME"), PROP_COMPUTER)
End With
Intento usar Excel VBA para capturar todos los atributos de archivo de los archivos en el disco , incluidos los atributos extendidos. Pude hacer que recorra los archivos y capture los atributos básicos (que provienen del sistema de archivos):
- Ruta de archivo
- Nombre del archivo
- Tamaño del archivo
- fecha de creacion
- Fecha de último acceso
- Fecha de la última modificación
- Tipo de archivo
También me gustaría capturar las propiedades extendidas que provienen del propio archivo:
- Autor
- Palabras clave
- Comentarios
- Ultimo autor
- Categoría
- Tema
Y otras propiedades que son visibles al hacer clic derecho en el archivo.
El objetivo es crear una lista detallada de todos los archivos en un servidor de archivos.
Puede obtener esto con .BuiltInDocmementProperties
.
Por ejemplo:
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
Consulte esta página para ver todos los campos a los que puede acceder: http://msdn.microsoft.com/en-us/library/bb220896.aspx
Si está intentando hacer esto fuera del cliente (es decir, con Excel cerrado y ejecutando código desde, por ejemplo, un programa .NET), debe usar DSOFile.dll .
''vb.net
''Extended file stributes
''visual basic .net sample
Dim sFile As Object
Dim oShell = CreateObject("Shell.Application")
Dim oDir = oShell.Namespace("c:/temp")
For i = 0 To 34
TextBox1.Text = TextBox1.Text & oDir.GetDetailsOf(oDir, i) & vbCrLf
For Each sFile In oDir.Items
TextBox1.Text = TextBox1.Text & oDir.GetDetailsOf(sFile, i) & vbCrLf
Next
TextBox1.Text = TextBox1.Text & vbCrLf
Next