Excel protegido por senha

Este artigo explica uma solução alternativa para o erro "não foi possível descriptografar o arquivo" ao tentar abrir uma pasta de trabalho do Excel protegida por senha.

Se você tentar abrir uma pasta de trabalho do Excel protegida por senha a partir do Access, receberá uma mensagem de erro “Não foi possível descriptografar o arquivo”. Adicionar um valor de Senha= à sua string de conexão também não funcionará. Você poderia abri-lo como um aplicativo Excel, mas então você teria que aprender sobre o modelo de objeto do Excel e tudo o que você quer fazer é lê-lo linha por linha como faria com qualquer arquivo Excel desprotegido.

A solução alternativa

Para contornar este problema, primeiro abra a pasta de trabalho do Excel usando GetObject() e depois abra-a usando a abordagem de conexão/conjunto de registros que você deseja usar. A abertura com GetObject() solicita a senha do usuário e, em seguida, você está livre para abrir o arquivo usando sua abordagem preferida. Por exemplo:

'Abrir a pasta de trabalho do Excel para solicitar a senha
Dim xl As Object
Set xl = GetObject(CurrentProject.Path & "\" & "MASTER JAN 2009.xls")

'Agora abra a pasta de trabalho para ler/escrever/o que for
Dim cnn1 As New ADODB.Connection
Dim rst1 As ADODB.Recordset
Dim strExcelName As String = "MASTER JAN 2009.xls"
Dim strWkBkName As String = "[MASTER 2008$]"
cnn1.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
"Data Source=" & CurrentProject.Path & "\" & strExcelName & ";" _
"Extended Properties=""Excel 8.0;"";"
Set rst1 = New ADODB.Recordset
rst1.Open strWkBkName, cnn1, , , adCmdTable
Do Until rst1.EOF
    'processar seus dados aqui
    rst1.MoveNext
Loop

Resumo

Um simples truque permite trabalhar com planilhas do Excel protegidas por senha e evitar a frustrante mensagem de erro “Não foi possível descriptografar o arquivo”. Claro, seu usuário precisa saber a senha ou isso não funcionará.