Macro para salvar o documento e aplicar senha de proteção
Neste tutorial criaremos uma macro que irá salvar o documento e aplicar senha de proteção ao mesmo. O documento será salvo no formato .docx e automaticamente será protegido com senha.
No exemplo que daremos aqui um novo documento será salvo com o Nome que foi informado na tabela de cadastro seguido da data e hora atuais e ao mesmo tempo será aplicada uma senha de proteção.
No exemplo será utilizado um Controle Activex para acionar a macro, porém, se você quiser, poderá adicionar uma nova guia e nesta nova guia adicionar o comando à faixa de opções ou então adicionar a macro à Barra de Ferramentas de Acesso Rápido.
A imagem abaixo mostra um documento de cadastro que contém um Botão de Comando (Controle ActiveX) ao qual vamos adicionar um código para que quando receber a ação de um clique salvar uma cópia do documento no formato .docx protegido por senha.
Salvar o documento na pasta padrão de armazenamentos de arquivos e proteger com senha.
No exemplo a seguir criaremos uma macro para salvar o documento e aplicar ao mesmo uma senha de proteção.
A Senha de proteção será o número do RG informado na tabela de cadastro. O documento será salvo na mesma pasta onde se encontra o arquivo original.
1- Clique na guia Desenvolvedor e no grupo Controles clique em Modo de Design para ativar o modo de design.
2- Selecione o Controle Activex (Botão de Comando) e clique com o botão direito do mouse e depois clique em Exibir Código.
3- No evento Click do botão de comando adicione o código abaixo:
Private Sub CommandButton1_Click()'Declara as variáveis
Dim vDataHora As String
Dim vNomeDoc As String
Dim vSenha As String
On Error GoTo CommandButton1_Click_Err
'Altera as propriedades Width e Height do botão de comando para que não apareça no novo arquivo
CommandButton1.Width = "1"
CommandButton1.Height = "1"
'A variável vNome Doc é igual ao texto digitado na primeira célula da segunda coluna da primeira linha da tabela 1
vNomeDoc = ActiveDocument.Tables(1).Cell(1, 2).Range.Text
'Retira o caracter especial de marca fim de célula para não gerar erro de permisão na hora de salvar.
vNomeDoc = Mid(vNomeDoc, 1, Len(vNomeDoc) - 2)
'Dependendo da versão do Office use o código abaixo (não esqueça de tirar o apostrofo)
'vNomeDoc = Mid(vNomeDoc, 1, Len(vNomeDoc) - 1)
'Exibe a data e hora atual do sistema
vDataHora = Format(Now, "dd-mm-yyyy hh-mm")
'A variável vSenha é igual ao conteúdo da segunda célula da quarta linha da tabela 1
vSenha = ActiveDocument.Tables(1).Cell(4, 2).Range.Text
'Retira o caracter especial de marca fim de célula para não gerar erro de permissão na hora de salvar.
vSenha = Mid(vSenha, 1, Len(vSenha) - 2)
'Usamos a propriedade Salvar Como para salvar o documento com o nome e data e hora atual e protege o documento gerado com senha
ActiveDocument.SaveAs2 FileName:= _
vNomeDoc & " " & vDataHora, FileFormat:= _
wdFormatXMLDocumentMacroEnabled, LockComments:=False, Password:=vSenha, _
AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
:=False, SaveAsAOCELetter:=False, CompatibilityMode:=15
'Fecha o Word
With ActiveDocument
.Close
End With
'Em caso de erro
CommandButton1_Click_Fim:
Exit Sub
CommandButton1_Click_Err:
MsgBox "Erro n." & Err.Number & " - " & Err.Description
Resume CommandButton1_Click_Fim
End Sub
Deverá ficar como na imagem abaixo:
Observe que no código acima alteramos as propriedades Width e Height do Controle ActiveX diminuindo os valores para o mínimo possível. Isso fará com que o botão não apareça no novo arquivo.
'Altera as propriedades Width e Height do botão de comando para que não apareça no novo arquivo.CommandButton1.Width = "1"
CommandButton1.Height = "1"
Note também que depois que o documento é salvo o Word é fechado. Devemos fazer com que as propriedades Width e Height do Controle Activex voltem ao seu tamanho original quando o arquivo for aberto novamente para efetuar um novo cadastro. Para isso usaremos o evento Open do documento.
Abra o documento de Cadastro novamente e no ambiente do Editor do Visual Basic clique em ThisDocument.
Na janela de código em Procedimento selecione o evento Open.
No evento Open do Objeto adicione o seguinte Código:
'Retorna os valores originais das propriedades width e Height do botão de comandoCommandButton1.Width = "107,25"
CommandButton1.Height = "24"
Deverá ficar como na imagem abaixo:
4- Feche o Editor do Visual Basic para voltar ao Word clicando em Arquivo e depois em Fechar e voltar para Microsoft Word.
5- Clique no botão de comando.
6- Vá até o local onde o documento foi salvo e dê dois cliques sobre ele para abri-lo.
7- Será exibida uma caixa de mensagem solicitando a senha para abrir o documento.
8- Informe a senha que no exemplo deste tutorial será sempre o número do RG informado no cadastro e clique no botão OK.
Consideração Final:
No exemplo deste tutorial a senha de proteção pega o valor que foi digitado na célula da tabela que corresponde ao RG, porém, é possível utilizar um outro dado da tabela, neste caso você terá que definir a variável vSenha a qual célula da tabela ela corresponde, por exemplo:
vSenha = ActiveDocument.Tables(1).Cell(4, 3).Range.TextNeste caso a senha passaria ser o número do CPF digitado na célula que corresponde a 4ª linha e 3ª coluna da tabela.
É possível aplicar uma senha fixa, ou seja, uma senha igual para todos os documentos, para isso basta excluir as seguintes linhas de código:
Dim vSenha As StringvSenha = ActiveDocument.Tables(1).Cell(4, 2).Range.Text
vSenha = Mid(vSenha, 1, Len(vSenha) - 2)
E alterar o valor das propriedades Password e WritePassword, por exemplo:
ActiveDocument.SaveAs2 FileName:= _vNomeDoc & " " & vDataHora, FileFormat:= _
wdFormatXMLDocumentMacroEnabled, LockComments:=False, Password:= "suasenhaaqui", _
AddToRecentFiles:=True, WritePassword:="suasenhaaqui", ReadOnlyRecommended:=False,_
EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
:=False, SaveAsAOCELetter:=False,CompatibilityMode:=15
Caso queira que o documento seja salvo como somente leitura altere o seguinte trecho de código:
ReadOnlyRecommended:=FalsePor
ReadOnlyRecommended:=True
As linhas de textos na cor verde são comentários adicionados para facilitar a compreensão das rotinas do código.
Faça o download do exemplo usado neste tutorial: Baixar Arquivo