Cómo leer las propiedades de un documento de Word mediante una macro de VBA
🔍 WiseChecker

Cómo leer las propiedades de un documento de Word mediante una macro de VBA

Las propiedades de documento en Word almacenan metadatos como el nombre del autor, el título, el asunto, las palabras clave y la fecha de último guardado. Es posible que necesite extraer esta información automáticamente al procesar varios archivos o generar informes. El panel de propiedades de documento integrado muestra estos datos, pero leerlos con una macro de VBA le permite recopilarlos de forma masiva o usarlos en otras aplicaciones. Este artículo explica cómo escribir una macro de VBA que lea tanto las propiedades integradas como las personalizadas de un documento de Word.

Puntos clave: Leer propiedades de documentos de Word con VBA

  • ActiveDocument.BuiltInDocumentProperties: Accede a metadatos estándar como autor, título y fecha de creación.
  • ActiveDocument.CustomDocumentProperties: Lee propiedades definidas por el usuario que usted u otras personas agregaron al documento.
  • Bucle For Each con property.Value: Recorre todas las propiedades y recupera sus valores actuales sin errores.

ADVERTISEMENT

Comprender las propiedades de documentos de Word en VBA

Word almacena dos tipos de propiedades de documento: integradas y personalizadas. Las propiedades integradas están predefinidas por Microsoft e incluyen campos como Autor, Título, Asunto, Palabras clave, Comentarios, Hora del último guardado, Fecha de creación y Tiempo total de edición. Las propiedades personalizadas las crean los usuarios u otras aplicaciones y pueden contener texto, números, fechas o valores Sí/No. Ambos tipos son accesibles a través del objeto Document en el modelo de objetos de VBA.

Para leer estas propiedades, se utilizan las colecciones BuiltInDocumentProperties y CustomDocumentProperties. Cada propiedad de estas colecciones tiene una propiedad Name, Value y Type. La propiedad Value puede generar un error si la propiedad está vacía o contiene un tipo de datos que VBA no puede interpretar directamente. Debe manejar esto con captura de errores o comprobación de tipos.

Antes de ejecutar cualquier macro que lea propiedades, asegúrese de que el documento se haya guardado al menos una vez. Propiedades como Last Save Time y Total Editing Time solo se rellenan después de una operación de guardado. Además, la macro debe ejecutarse desde el propio documento o desde una plantilla adjunta al documento. El objeto ActiveDocument hace referencia al documento abierto actualmente en la ventana de la aplicación Word.

Escribir la macro de VBA para leer las propiedades del documento

Método 1: Leer una propiedad integrada específica

  1. Abrir el Editor de VBA
    Presione Alt+F11 en Word para abrir el editor de Visual Basic para Aplicaciones. Si el editor se abre pero el Explorador de proyectos está oculto, presione Ctrl+R para mostrarlo.
  2. Insertar un nuevo módulo
    En el Explorador de proyectos, busque el nombre de su documento (por ejemplo, Normal o Document1). Haga clic con el botón derecho y elija Insertar > Módulo. Aparece una ventana de código en blanco.
  3. Crear la macro con un procedimiento Sub
    Escriba el siguiente código en la ventana del módulo. Esta macro lee la propiedad Author y la muestra en un cuadro de mensaje.
    Sub ReadAuthorProperty()
        Dim authorValue As String
        On Error Resume Next
        authorValue = ActiveDocument.BuiltInDocumentProperties("Author").Value
        If Err.Number <> 0 Then
            authorValue = "Not available"
            Err.Clear
        End If
        MsgBox "Author: " & authorValue
    End Sub
  4. Ejecutar la macro
    Presione F5 mientras el cursor está dentro del procedimiento ReadAuthorProperty. Un cuadro de mensaje muestra el nombre del autor. Si la propiedad está vacía, la salida muestra “No disponible”.

Método 2: Recorrer todas las propiedades integradas

  1. Agregar una nueva macro al mismo módulo
    Debajo de la macro anterior, escriba el siguiente código. Esta macro recorre cada propiedad integrada e imprime su nombre y valor en la Ventana Inmediato.
    Sub ListAllBuiltInProperties()
        Dim prop As DocumentProperty
        Dim propValue As Variant
        
        For Each prop In ActiveDocument.BuiltInDocumentProperties
            On Error Resume Next
            propValue = prop.Value
            If Err.Number <> 0 Then
                propValue = "Empty or unsupported type"
                Err.Clear
            End If
            Debug.Print prop.Name & ": " & propValue
        Next prop
        
        MsgBox "Properties listed in Immediate Window. Press Ctrl+G to view."
    End Sub
  2. Abrir la Ventana Inmediato
    Presione Ctrl+G en el editor de VBA para abrir la Ventana Inmediato. Ejecute la macro ListAllBuiltInProperties colocando el cursor dentro de ella y presionando F5.
  3. Revisar la salida
    La Ventana Inmediato muestra cada nombre de propiedad seguido de su valor. Las propiedades sin valor muestran “Vacío o tipo no compatible”.

Método 3: Leer propiedades personalizadas del documento

  1. Agregar una macro para propiedades personalizadas
    Escriba el siguiente código en el mismo módulo. Lee todas las propiedades personalizadas y las muestra en un cuadro de mensaje.
    Sub ListCustomProperties()
        Dim prop As DocumentProperty
        Dim output As String
        Dim propValue As Variant
        
        output = "Custom Properties:" & vbCrLf
        
        For Each prop In ActiveDocument.CustomDocumentProperties
            On Error Resume Next
            propValue = prop.Value
            If Err.Number <> 0 Then
                propValue = "Empty or unsupported type"
                Err.Clear
            End If
            output = output & prop.Name & ": " & propValue & vbCrLf
        Next prop
        
        MsgBox output
    End Sub
  2. Ejecutar la macro
    Coloque el cursor dentro de ListCustomProperties y presione F5. Un cuadro de mensaje enumera todas las propiedades personalizadas y sus valores.

Método 4: Exportar propiedades a un archivo de texto

  1. Crear una macro que escriba en un archivo
    Esta macro guarda tanto las propiedades integradas como las personalizadas en un archivo de texto en el escritorio. Agregue el siguiente código al módulo.
    Sub ExportPropertiesToFile()
        Dim prop As DocumentProperty
        Dim filePath As String
        Dim fileNum As Integer
        Dim propValue As Variant
        
        filePath = Environ("USERPROFILE") & "\Desktop\DocumentProperties.txt"
        fileNum = FreeFile
        
        Open filePath For Output As #fileNum
        
        Print #fileNum, "Built-In Properties:"
        For Each prop In ActiveDocument.BuiltInDocumentProperties
            On Error Resume Next
            propValue = prop.Value
            If Err.Number <> 0 Then
                propValue = "Empty"
                Err.Clear
            End If
            Print #fileNum, prop.Name & " = " & propValue
        Next prop
        
        Print #fileNum, ""
        Print #fileNum, "Custom Properties:"
        For Each prop In ActiveDocument.CustomDocumentProperties
            On Error Resume Next
            propValue = prop.Value
            If Err.Number <> 0 Then
                propValue = "Empty"
                Err.Clear
            End If
            Print #fileNum, prop.Name & " = " & propValue
        Next prop
        
        Close #fileNum
        MsgBox "Properties exported to " & filePath
    End Sub
  2. Ejecutar la macro de exportación
    Presione F5 con el cursor dentro de ExportPropertiesToFile. Aparece un archivo de texto llamado DocumentProperties.txt en el escritorio. Ábralo con el Bloc de notas para ver la lista completa de propiedades.

ADVERTISEMENT

Problemas comunes al leer propiedades de documentos mediante VBA

El valor de la propiedad devuelve un error o una cadena vacía

Algunas propiedades integradas no se rellenan hasta que se guarda el documento. Por ejemplo, Last Save Time muestra un error si el documento nunca se ha guardado. Use On Error Resume Next antes de acceder a la propiedad Value y compruebe Err.Number después. Si la propiedad está vacía, asigne una cadena predeterminada como “No disponible”.

La macro no encuentra una propiedad específica por su nombre

Los nombres de las propiedades no distinguen entre mayúsculas y minúsculas, pero deben coincidir exactamente en la ortografía. Para las propiedades integradas, use el nombre en inglés tal como aparece en el modelo de objetos: Author, Title, Subject, Keywords, Comments, Last Save Time, Creation Date, Last Printed, Revision Number, Total Editing Time, Number of Pages, Number of Words, Number of Characters, Security, Category, Manager, Company y Hyperlink Base. Para las propiedades personalizadas, el nombre debe coincidir con la cadena exacta utilizada cuando se creó la propiedad.

Las propiedades personalizadas no son visibles en el panel del documento

Las propiedades personalizadas agregadas por otras aplicaciones pueden usar un tipo de datos diferente que VBA no puede leer directamente. La propiedad Value devuelve un Variant, pero si los datos subyacentes son una fecha o un booleano, la conversión puede fallar. Use la propiedad Type del objeto DocumentProperty para determinar el tipo de datos antes de leer el valor. Las constantes de tipo son msoPropertyTypeNumber, msoPropertyTypeBoolean, msoPropertyTypeDate, msoPropertyTypeString y msoPropertyTypeFloat.

Propiedades integradas frente a propiedades personalizadas: acceso y comportamiento

Elemento Propiedades integradas Propiedades personalizadas
Conjunto predefinido Sí, fijado por Microsoft No, definido por el usuario
Método de acceso ActiveDocument.BuiltInDocumentProperties ActiveDocument.CustomDocumentProperties
Unicidad del nombre Los nombres son fijos y no se pueden duplicar Los nombres deben ser únicos por documento
Tipos de datos admitidos String, Date, Number (varía según la propiedad) String, Number, Date, Boolean, Float
Error con valor vacío Sí, requiere On Error Resume Next Sí, requiere On Error Resume Next
Se puede modificar mediante VBA Sí, algunas son de solo lectura Sí, todas son modificables
Persisten después de guardar Sí Sí

Ahora puede escribir una macro de VBA para leer las propiedades de documentos de cualquier archivo de Word. Comience con los ejemplos de código anteriores y ajústelos para los nombres de propiedades específicos. Para un uso avanzado, considere recorrer todos los documentos abiertos con la colección Documents o leer propiedades de archivos cerrados mediante el método GetObject. Un consejo concreto: use siempre On Error Resume Next y compruebe Err.Number en cada acceso a propiedades para evitar bloqueos en tiempo de ejecución cuando falten propiedades.

ADVERTISEMENT