As propriedades de documento no Word armazenam metadados como nome do autor, título, assunto, palavras-chave e data da última gravação. Talvez você precise extrair essas informações automaticamente ao processar vários arquivos ou gerar relatórios. O painel de propriedades interno mostra esses dados, mas lê-los com uma macro VBA permite coletá-los em lote ou usá-los em outros aplicativos. Este artigo explica como escrever uma macro VBA que lê propriedades de documento internas e personalizadas de um documento do Word.
Principais Conclusões: Leitura de Propriedades de Documento do Word com VBA
- ActiveDocument.BuiltInDocumentProperties: Acessa metadados padrão como autor, título e data de criação.
- ActiveDocument.CustomDocumentProperties: Lê propriedades definidas pelo usuário que você ou outras pessoas adicionaram ao documento.
- Loop For Each com property.Value: Itera por todas as propriedades e recupera seus valores atuais sem erros.
Entendendo as Propriedades de Documento do Word no VBA
O Word armazena dois tipos de propriedades de documento: internas e personalizadas. As propriedades internas são predefinidas pela Microsoft e incluem campos como Autor, Título, Assunto, Palavras-chave, Comentários, Hora da Última Gravação, Data de Criação e Tempo Total de Edição. As propriedades personalizadas são criadas por usuários ou outros aplicativos e podem conter texto, números, datas ou valores Sim/Não. Ambos os tipos são acessíveis por meio do objeto Document no modelo de objeto VBA.
Para ler essas propriedades, você usa as coleções BuiltInDocumentProperties e CustomDocumentProperties. Cada propriedade nessas coleções tem as propriedades Name, Value e Type. A propriedade Value pode gerar um erro se a propriedade estiver vazia ou contiver um tipo de dados que o VBA não consegue interpretar diretamente. Você deve lidar com isso usando tratamento de erros ou verificação de tipo.
Antes de executar qualquer macro que leia propriedades, certifique-se de que o documento foi salvo pelo menos uma vez. Propriedades como Last Save Time e Total Editing Time só são preenchidas após uma operação de salvamento. Além disso, a macro deve ser executada a partir do próprio documento ou de um modelo anexado ao documento. O objeto ActiveDocument refere-se ao documento atualmente aberto na janela do aplicativo Word.
Escrevendo a Macro VBA para Ler Propriedades do Documento
Método 1: Lendo uma Propriedade Interna Específica
- Abra o Editor VBA
Pressione Alt+F11 no Word para abrir o editor Visual Basic for Applications. Se o editor abrir mas o Project Explorer estiver oculto, pressione Ctrl+R para exibi-lo. - Insira um novo módulo
No Project Explorer, localize o nome do seu documento (por exemplo, Normal ou Document1). Clique com o botão direito e escolha Inserir > Módulo. Uma janela de código em branco aparece. - Crie a macro com um procedimento Sub
Digite o seguinte código na janela do módulo. Esta macro lê a propriedade Autor e a exibe em uma caixa de mensagem.Sub ReadAuthorProperty() Dim authorValue As String On Error Resume Next authorValue = ActiveDocument.BuiltInDocumentProperties("Author").Value If Err.Number <> 0 Then authorValue = "Não disponível" Err.Clear End If MsgBox "Autor: " & authorValue End Sub - Execute a macro
Pressione F5 enquanto o cursor estiver dentro do procedimento ReadAuthorProperty. Uma caixa de mensagem exibe o nome do autor. Se a propriedade estiver vazia, a saída mostra “Não disponível”.
Método 2: Percorrendo Todas as Propriedades Internas
- Adicione uma nova macro ao mesmo módulo
Abaixo da macro anterior, digite o seguinte código. Esta macro itera por cada propriedade interna e imprime seu nome e valor na Janela Imediata.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 = "Vazia ou tipo não suportado" Err.Clear End If Debug.Print prop.Name & ": " & propValue Next prop MsgBox "Propriedades listadas na Janela Imediata. Pressione Ctrl+G para visualizar." End Sub - Abra a Janela Imediata
Pressione Ctrl+G no editor VBA para abrir a Janela Imediata. Execute a macro ListAllBuiltInProperties colocando o cursor dentro dela e pressionando F5. - Revise a saída
A Janela Imediata mostra cada nome de propriedade seguido de seu valor. Propriedades sem valor exibem “Vazia ou tipo não suportado”.
Método 3: Lendo Propriedades Personalizadas do Documento
- Adicione uma macro para propriedades personalizadas
Digite o seguinte código no mesmo módulo. Ele lê todas as propriedades personalizadas e as exibe em uma caixa de mensagem.Sub ListCustomProperties() Dim prop As DocumentProperty Dim output As String Dim propValue As Variant output = "Propriedades Personalizadas:" & vbCrLf For Each prop In ActiveDocument.CustomDocumentProperties On Error Resume Next propValue = prop.Value If Err.Number <> 0 Then propValue = "Vazia ou tipo não suportado" Err.Clear End If output = output & prop.Name & ": " & propValue & vbCrLf Next prop MsgBox output End Sub - Execute a macro
Coloque o cursor dentro de ListCustomProperties e pressione F5. Uma caixa de mensagem lista todas as propriedades personalizadas e seus valores.
Método 4: Exportando Propriedades para um Arquivo de Texto
- Crie uma macro que escreve em um arquivo
Esta macro salva as propriedades internas e personalizadas em um arquivo de texto na sua área de trabalho. Adicione o seguinte código ao 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, "Propriedades Internas:" For Each prop In ActiveDocument.BuiltInDocumentProperties On Error Resume Next propValue = prop.Value If Err.Number <> 0 Then propValue = "Vazia" Err.Clear End If Print #fileNum, prop.Name & " = " & propValue Next prop Print #fileNum, "" Print #fileNum, "Propriedades Personalizadas:" For Each prop In ActiveDocument.CustomDocumentProperties On Error Resume Next propValue = prop.Value If Err.Number <> 0 Then propValue = "Vazia" Err.Clear End If Print #fileNum, prop.Name & " = " & propValue Next prop Close #fileNum MsgBox "Propriedades exportadas para " & filePath End Sub - Execute a macro de exportação
Pressione F5 com o cursor dentro de ExportPropertiesToFile. Um arquivo de texto chamado DocumentProperties.txt aparece na sua área de trabalho. Abra-o com o Bloco de Notas para ver a listagem completa das propriedades.
Problemas Comuns ao Ler Propriedades de Documento via VBA
O Valor da Propriedade Retorna um Erro ou String Vazia
Algumas propriedades internas não são preenchidas até que o documento seja salvo. Por exemplo, Last Save Time mostra um erro se o documento nunca foi salvo. Use On Error Resume Next antes de acessar a propriedade Value e verifique Err.Number depois. Se a propriedade estiver vazia, atribua uma string padrão como “Não disponível”.
A Macro Não Consegue Encontrar uma Propriedade Específica pelo Nome
Os nomes das propriedades não diferenciam maiúsculas de minúsculas, mas devem corresponder exatamente na grafia. Para propriedades internas, use o nome em inglês conforme aparece no modelo de objeto: 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 e Hyperlink Base. Para propriedades personalizadas, o nome deve corresponder exatamente à string usada quando a propriedade foi criada.
Propriedades Personalizadas Não Estão Visíveis no Painel do Documento
Propriedades personalizadas adicionadas por outros aplicativos podem usar um tipo de dados diferente que o VBA não consegue ler diretamente. A propriedade Value retorna um Variant, mas se os dados subjacentes forem uma data ou um booleano, a conversão pode falhar. Use a propriedade Type do objeto DocumentProperty para determinar o tipo de dados antes de ler o valor. As constantes de tipo são msoPropertyTypeNumber, msoPropertyTypeBoolean, msoPropertyTypeDate, msoPropertyTypeString e msoPropertyTypeFloat.
Propriedades Internas vs Personalizadas: Acesso e Comportamento
| Item | Propriedades Internas | Propriedades Personalizadas |
|---|---|---|
| Conjunto predefinido | Sim, fixo pela Microsoft | Não, definido pelo usuário |
| Método de acesso | ActiveDocument.BuiltInDocumentProperties | ActiveDocument.CustomDocumentProperties |
| Unicidade do nome | Nomes são fixos e não podem ser duplicados | Nomes devem ser únicos por documento |
| Tipos de dados suportados | String, Date, Number (varia por propriedade) | String, Number, Date, Boolean, Float |
| Erro em valor vazio | Sim, requer On Error Resume Next | Sim, requer On Error Resume Next |
| Pode ser modificada via VBA | Sim, algumas são somente leitura | Sim, todas são graváveis |
| Persistem após salvar | Sim | Sim |
Agora você pode escrever uma macro VBA para ler propriedades de documento de qualquer arquivo do Word. Comece com os exemplos de código acima e ajuste-os para os nomes de propriedade específicos. Para uso avançado, considere percorrer todos os documentos abertos com a coleção Documents ou ler propriedades de arquivos fechados usando o método GetObject. Uma dica concreta: sempre use On Error Resume Next e verifique Err.Number para cada acesso a propriedade para evitar travamentos em tempo de execução quando as propriedades estiverem ausentes.