2011-04-13 67 views
16

Intentando utilizar Excel VBA para capturar todos los atributos de archivo de en el disco, incluidos los atributos extendidos. Fue capaz de conseguir que se bucle a través de los archivos y capturar los atributos básicos (que provienen del sistema de archivos):Uso de VBA para obtener atributos extendidos de archivo

  • Ruta del archivo
  • Nombre de archivo
  • Tamaño del archivo
  • Fecha de creación
  • fecha de la última Consultado
  • fecha de la última actualización
  • Tipo de archivo

Desea, además, capturar las propiedades extendidas que provienen del propio archivo:

  • Autor
  • Palabras clave
  • Comentarios
  • último autor
  • Categoría
  • Asunto

Y otro apoyo erties 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.

Respuesta

21

Usted dice bucle ... así que si desea 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 attribure, 9 para Autor por ejemplo. Para enumerar los índices disponibles para su referencia, puede reemplazar el ciclo for por;

for i = 0 To 40 
    debug.? i, oDir.GetDetailsOf(oDir.Items, i) 
Next 

rápidamente para un solo archivo/atributos:

Const PROP_COMPUTER As Long = 56 

With CreateObject("Shell.Application").Namespace("C:\HOSTDIRECTORY") 
    MsgBox .GetDetailsOf(.Items.Item("FILE.NAME"), PROP_COMPUTER) 
End With 
+1

También vea el sitio de Microsoft: http://technet.microsoft.com/en-us/library/ee176615.aspx –

+2

Para los dirigidos aquí, esto está desactualizado un poco. En este momento hay 288 atributos que puedes usar. Por ejemplo, la versión de archivo 271. Actualice el ciclo for para verlos todos. http://msdn.microsoft.com/en-us/library/windows/desktop/bb787870(v=vs.85).aspx – TrialAndError

+0

Otra actualización: A partir de algún momento del verano pasado (2017), todos los índices superiores a 6 son inválido, devolviendo solo cadenas vacías. –

7

Puede obtenerlo 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 

Ver esta página para todos los campos que puede acceder con esto: http://msdn.microsoft.com/en-us/library/bb220896.aspx

Si usted está tratando de hacerlo fuera del cliente (es decir, con Excel cerrados y ejecutando código de, por ejemplo, un programa .NET), necesita usar DSOFile.dll.

+0

Mi pregunta no era muy clara. Estoy tratando de capturar los atributos de archivo de los archivos en el disco. Parece que está leyendo las propiedades del documento abierto. ¿Cómo obtendría las propiedades de un archivo en el disco? –

+0

Ah, estaba etiquetado como Excel-VBA, así que pensé que querías hacer esto desde el interior del cliente. Para fuera del cliente (es decir, leyendo desde el disco), usaría DSOFile.dll (el último párrafo en mi respuesta). –

+0

Se cambiaron las etiquetas ya que esto no tiene nada que ver con Excel. –

2
'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 
Cuestiones relacionadas