Sempre tomo cuidado com esse tipo de post, dada polêmica que estes geram. Mas o fato é que este não é o primeiro site que vai divulgar esta façanha e nem será o último. Portanto, vamos a ela.
A situação ocorreu recentemente comigo, vindo da digníssima, que protegeu um documento de Word para edição e, claro, depois de um tempo, esqueceu qual era a senha.
Resultado, pediu socorro e fui atrás de saber como é que resolveria o problema (depois de dar uma bela bronca, claro!). Pensei nas soluções ditas “sujas” que normalmente são utilizadas, mas antes disso insisti num método mais limpo, primeiro pela facilidade de aplicá-lo, segundo, para me sentir menos culpado.
😉
Por fim,uma dica no fórum de suporte da própria Microsoft (UAU!) explicava um macete para recuperar o conteúdo do documento, sem vioá-lo. Ou seja, você recupera o trabalho, mas não interfere no arquivo original. Melhor impossível! Como fazer isso?
Supondo que seu arquivo tenha o nome Protegido.docx e ele esteja com a estrutura bloqueada (é esse caso que estamos tratando), basta você abrir o Word num documento em branco, selecionar a opção Inserir->Objeto->Texto do Arquivo. Quando a caixa de diálogo de selecionar arquivo abrir, basta selecionar o local onde está seu arquivo Protegido.docx e clicar em Inserir.
Voilá! Seu documento está lá, com todo conteúdo. O máximo que vai acontecer é alguma perda de formatação, mas em vista do trabalho recuperado, é uma mão na roda!
Veteranos do VBA sabem com alguma facilidade como realizar a manipulação de arquivos, por exemplo, do Excel, para abrir, ler dados e em seguida fechar o arquivo.
Um exemplo:
Set wbook = Application.Workbooks.Open("Arquivo.xls")
wbook.Sheets("PlanilhaOrigem").Range("A1:B10").Copy
ThisWorkbook.Sheets("`PlanilhaDestino").Paste
wbook.Close
Set wbook = Application.Workbooks.Open("Arquivo.xls")
wbook.Sheets("PlanilhaOrigem").Range("A1:B10").Copy
ThisWorkbook.Sheets("`PlanilhaDestino").Paste
wbook.Close
Mas, vou aproveitar este caso específico que gera um pequeno problema. Pelo fato de copiar os dados da Arquivo.xls, ao executar a rotina Close, a mensagem:
“Deseja manter os conteúdos na área de transferência?”
O mesmo aconteceria se você alterasse o arquivo destino, com a diferença de que a mensagem seria a de salvar ou não o arquivo.
Como fazer para evitar essas mensagens? Simples!
Antes da instrução Close, basta colocar o seguinte:
Application.DisplayAlerts = False
Application.DisplayAlerts = False
O que a instrução faz? Ela inibe as mensagens de alerta do Office, executante determinadas ações sem que as telas de aviso interfiram no fluxo de execução do código.
A única atenção é não utilizá-lo indiscriminadamente, já que, se os avisos aparecem, é porque algo está potencialmente errado ou sendo perdido. Mas caso saiba exatamente o que está acontecendo no seu código, vá em frente.