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.
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
- 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. - 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. - 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 - 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
- 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 - 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. - 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
- 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 - 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
- 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 - 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.
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.