Como Ler Propriedades de Documento do Word Programaticamente com Macro VBA
🔍 WiseChecker

Como Ler Propriedades de Documento do Word Programaticamente com Macro VBA

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.

ADVERTISEMENT

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

  1. 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.
  2. 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.
  3. 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
  4. 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

  1. 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
  2. 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.
  3. 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

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

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

ADVERTISEMENT

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.

ADVERTISEMENT