Como Aplicar Proteção de Documento do Word com Permissões Específicas por Seção via VBA
🔍 WiseChecker

Como Aplicar Proteção de Documento do Word com Permissões Específicas por Seção via VBA

Você precisa proteger partes de um documento do Word enquanto deixa outras seções editáveis para usuários ou grupos específicos. A proteção padrão do Word se aplica ao documento inteiro e não permite controle detalhado sobre seções individuais. Este artigo explica como usar o Visual Basic for Applications (VBA) para aplicar proteção específica por seção que restringe a edição em algumas seções enquanto permite alterações em outras. Você aprenderá a estrutura do código VBA, como definir senhas por seção e como atribuir permissões de edição a usuários específicos.

Principais Conclusões: Proteção de Documento Específica por Seção via VBA

  • Ferramentas > Macro > Editor do Visual Basic (Alt+F11): Abra o editor VBA para escrever e executar macros de proteção.
  • ActiveDocument.Sections(index).ProtectedForForms = True: Bloqueie uma seção específica para que apenas campos de formulário possam ser editados.
  • ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True, Password:=”senha”: Aplique restrições de edição protegidas por senha ao documento inteiro, preservando as configurações de campos de formulário por seção.
  • ActiveDocument.Sections(index).Range.Editors.Add Editor:=”nome de usuário”: Conceda permissões de edição a usuários específicos para uma determinada seção.

ADVERTISEMENT

Como Funciona a Proteção Específica por Seção no Word

A proteção de documento integrada do Word (Revisão > Restringir Edição) se aplica ao documento inteiro. Você pode optar por permitir apenas comentários, alterações controladas ou preenchimento de formulários. No entanto, esse método não permite bloquear a Seção 1 enquanto deixa a Seção 2 totalmente editável. O VBA oferece uma solução alternativa combinando a proteção de campos de formulário com permissões por seção.

O conceito central usa a propriedade ProtectedForForms de um objeto Section. Quando definida como True, essa seção se comporta como se contivesse apenas campos de formulário — nenhum outro conteúdo pode ser editado. Ao definir essa propriedade como False para as seções que você deseja que permaneçam editáveis, você cria um documento com proteção mista. Em seguida, você chama o método Protect no objeto Document com wdAllowOnlyFormFields para aplicar as configurações por seção.

Pré-requisitos

Antes de escrever o código VBA, verifique o seguinte:

  • Você tem um documento do Word dividido em seções usando quebras de seção (Layout > Quebras > Próxima Página, Contínua, etc.).
  • Você conhece os números de índice das seções que deseja proteger. A Seção 1 é a primeira seção do documento.
  • Você tem o editor VBA habilitado. Vá em Arquivo > Opções > Personalizar Faixa de Opções e marque a guia Desenvolvedor. Em seguida, clique em Desenvolvedor > Visual Basic.
  • Se você planeja atribuir permissões a usuários específicos, esses usuários devem ter contas Microsoft ou fazer parte da mesma organização usando o Information Rights Management (IRM).

Passos para Aplicar Proteção Específica por Seção Usando VBA

Siga estes passos para criar uma macro que bloqueia a Seção 1 e a Seção 3 enquanto deixa a Seção 2 editável. Ajuste os índices das seções para corresponder ao seu documento.

  1. Abra o Editor VBA
    Pressione Alt+F11 para abrir o editor Visual Basic for Applications. No Explorador de Projetos, localize seu documento (por exemplo, Projeto (Documento1)).
  2. Insira um novo módulo
    Clique em Inserir > Módulo para criar um módulo de código em branco.
  3. Escreva a macro de proteção
    Cole o seguinte código no módulo:
    Sub ProtectSections()
    Dim doc As Document
    Set doc = ActiveDocument

    ' Desproteja o documento primeiro se já estiver protegido
    If doc.ProtectionType <> wdNoProtection Then
    doc.Unprotect Password:=""
    End If

    ' Defina ProtectedForForms para seções específicas
    ' Seção 1: protegida
    doc.Sections(1).ProtectedForForms = True
    ' Seção 2: editável
    doc.Sections(2).ProtectedForForms = False
    ' Seção 3: protegida
    doc.Sections(3).ProtectedForForms = True

    ' Aplique proteção em nível de documento para forçar edição apenas em campos de formulário
    doc.Protect Type:=wdAllowOnlyFormFields, NoReset:=True, Password:="MinhaSenha123"

    MsgBox "Proteção aplicada. Seções 1 e 3 estão bloqueadas; Seção 2 está editável."
    End Sub

  4. Execute a macro
    Pressione F5 enquanto o cursor estiver dentro da macro, ou vá em Executar > Executar Sub/UserForm. Uma caixa de mensagem confirma que a proteção foi aplicada.
  5. Teste a proteção
    Tente editar texto na Seção 1 ou Seção 3. O Word deve impedir alterações. Mude para a Seção 2 e verifique se você pode editar livremente. Se o documento estiver protegido por senha, você deve inserir a senha para desprotegê-lo posteriormente.

Atribuindo Permissões a Usuários Específicos

Para permitir que apenas determinados usuários editem uma seção enquanto a mantém bloqueada para outros, adicione o seguinte código dentro da macro após definir ProtectedForForms, mas antes de chamar doc.Protect.

  1. Adicione um usuário à coleção Editors de uma seção
    Use o método Editors.Add com o e-mail ou nome de usuário:
    doc.Sections(2).Range.Editors.Add Editor:="usuario@exemplo.com"
    Isso concede permissão de edição a esse usuário para a Seção 2, mesmo quando o documento está protegido.
  2. Remova todos os editores de uma seção protegida
    Para garantir que ninguém além do proprietário possa editar uma seção protegida, limpe a coleção Editors:
    doc.Sections(1).Range.Editors.DeleteAll
  3. Aplique proteção com permissões de usuário
    Após definir os editores, chame doc.Protect Type:=wdAllowOnlyFormFields, NoReset:=True, Password:="MinhaSenha123". Os usuários adicionados como editores podem modificar o conteúdo em suas seções designadas.

ADVERTISEMENT

Problemas Comuns ao Usar VBA para Proteção de Seções

ProtectedForForms Não Bloqueia a Seção

Se uma seção permanecer editável após definir ProtectedForForms = True, provavelmente você esqueceu de chamar doc.Protect no documento. A propriedade ProtectedForForms só entra em vigor quando o documento está protegido com wdAllowOnlyFormFields. Sempre inclua a linha doc.Protect após definir as propriedades da seção.

A Macro é Executada, mas a Proteção Não é Aplicada Após Fechar e Reabrir

As configurações de proteção do documento são salvas com o arquivo. Ao reabrir o documento, a proteção permanece ativa. No entanto, as configurações de ProtectedForForms por seção também são preservadas. Para verificar, abra o documento, vá em Revisão > Restringir Edição e verifique se “Preenchimento de formulários” está selecionado. Se o painel mostrar “Sem proteção”, execute a macro novamente. Considere adicionar uma macro AutoOpen para reaplicar a proteção automaticamente.

Erro de Permissão ao Adicionar Editores

O método Editors.Add exige que o documento use Information Rights Management (IRM) ou que o usuário seja autenticado por meio de uma conta Microsoft. Se você receber um erro de tempo de execução, certifique-se de que o documento não esteja já protegido com um tipo diferente. Desproteja o documento primeiro, depois adicione os editores e, finalmente, reaplique a proteção.

Item Restrição de Edição Padrão do Word Proteção Específica por Seção via VBA
Escopo Documento inteiro Seções individuais
Permissões de usuário Não suportado por seção Suportado via coleção Editors
Senha Uma senha para o documento inteiro Uma senha para o documento inteiro, mas as seções se comportam de forma diferente
Edição permitida Apenas comentários, alterações controladas ou campos de formulário Edição completa em seções desprotegidas; apenas campos de formulário em seções protegidas
Requer VBA Não Sim, para definir a configuração inicial

Agora você pode aplicar proteção de documento específica por seção no Word usando VBA. Comece identificando as seções em seu documento e escrevendo uma macro que define ProtectedForForms para cada seção. Lembre-se de chamar doc.Protect com wdAllowOnlyFormFields para aplicar as configurações. Para cenários avançados, atribua editores a seções específicas usando o método Editors.Add. Para automatizar a proteção toda vez que o documento for aberto, coloque a macro no módulo ThisDocument e use o evento Document_Open.

ADVERTISEMENT