Notifications
Clear all

ERRO 1004, O MÉTODO OPEN DO 'WORKBOOKS' FALHOU

7 Posts
4 Usuários
0 Reactions
4,159 Visualizações
(@jhenrique)
Posts: 17
Active Member
Topic starter
 

Pessoal, criei uma macro que abre uma planilha fechada e depois a salva num outro lugar com um outro nome. Esta macro roda dentro de um laço de repetição que é executado mais de 1000 vezes. Acontece que muitas destas planilhas estão bugadas, quero dizer, quando eu tento abri-las manualmente, eu recebo a seguinte mensagem:

"O Excel encontrou conteúdo ilegível em 'blabla.xlsx'. Deseja recuperar o conteúdo desta pasta de trabalho? Se você confia na origem desta pasta de trabalho, clique em Sim."

Então, quando eu executo minha macro e ela tenta abrir tais planilhas, eu recebo a seguinte mensagem do VBA: "Erro em tempo de execução '1004':
O método 'Open' do objeto "workbooks' falhou"

E o laço de repetição é indesejavelmente pausado, até que eu, manualmente, abra tal planilha, clique em "Sim", para recuperar o arquivo e daí clico em Salvar Como e salvo esta planilha. Daí sim a macro consegue abrir esta planilha sem problemas nenhum.

Pois bem, gostaria de saber como fazer para contornar este problema.

Por "contornar", eu quero dizer o seguinte...
1) Ou a macro, ao ser interrompida, pula esse laço e vai para a execução do laço seguinte (que me parece a opção mais viável).
2) Ou a macro dá um jeito de abrir este arquivo forçosamente e continuar a execução dos meus comandos.

Ah, mais uma coisa, após abrir manualmente a planilha bugada, clicando em sim, eu recebo uma seguinte mensagem de erro:

"O Excel não pôde abrir o arquivo reparando ou removendo o conteúdo ilegível."

Restando apenas um botão para clicar e proseguir, o botão "Fechar". Daí sim, eu estou apto para manipular a planilha.

Então, é possível contornar o problema?

Desde já, muito obrigado!!!

 
Postado : 06/02/2017 10:05 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa tarde jhenrique,

Como você não colocou a planilha, só posso especular.

Para que não apareça mensagens use o seguinte comando:

'Desabilita as mensagens 
Application.DisplayAlerts = False

'---- Seu código ----'

'Habilita de novo
Application.DisplayAlerts = True

Você pode tentar usar os comandos de erros do VBA (On Error Goto X ou On Error Resume Next) para o código continuar ou pular para outra linha caso acontece um erro. Mas para esse comandos ficarem bons você tem que saber que tipos de erros podem acontecer.

Por último, tente descobrir porque esses arquivos que você está abrindo estão corrompidos.

att,

 
Postado : 07/02/2017 12:39 pm
(@jhenrique)
Posts: 17
Active Member
Topic starter
 

Eu já estou usando o código "Application.DisplayAlerts = False" no início da minha macro, mas ela não funcionou pra resolver esse problema.

Veja,

Sub Renomear()

Application.DisplayAlerts = False
Application.ScreenUpdating = False

Dim i As Integer
Dim j As Integer

Dim X As String
Dim Y As Integer
Dim Z As String

Dim Path_Old As String
Dim Path_New As String
Dim File_Old As String
Dim File_New As String
Dim Full_Old As String
Dim Full_New As String

' Alterar aqui!!!
Path_Old = "C:UsersJHenryDesktopLinksFinancials (Gross)Balance_Q"
Path_New = "C:UsersJHenryDesktopLinksFinancials (Net)Balance_Q"

' Alterar aqui!!!
X = "B"

' Alterar aqui!!!
j = 8457

For i = 5 To j

Y = i
Z = X & Y

File_Old = Workbooks("List of all files.xlsm").Worksheets("Lists").Range(Z).Value
Full_Old = Path_Old & File_Old

Workbooks.Open (Full_Old)

File_New = "#" & Workbooks(File_Old).Sheets(1).Name & "@" & ".xlsx"
Full_New = Path_New & File_New

ActiveWorkbook.SaveAs (Full_New)

ActiveWorkbook.Close

Next

End Sub

Onde eu devo inserir, exatamente, "On Error Goto X" ou o "On Error Resume Next"??

 
Postado : 07/02/2017 9:09 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa noite JHenrique,

Olhando o seu código suponho que o erro ocorra no ponto que tem: Workbooks.Open (Full_Old)

Não consegui entender o objetivo do seu código, você pode comentar ele?

att,

 
Postado : 07/02/2017 9:21 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Bom dia, JHenrique.

Vc já tentou, no método Open, alterar a propriedade CorrupLoad para xlRepairFile ou para xlExtractData?

Como vc não anexou arquivos estou na mesma situação do Bruno, só especulando mesmo. Inclusive não tenho nenhum corrupto aqui prá testar (e estou muito longe de Brasília também, :lol: )

 
Postado : 08/02/2017 5:56 am
(@jhenrique)
Posts: 17
Active Member
Topic starter
 

Boa noite JHenrique,

Olhando o seu código suponho que o erro ocorra no ponto que tem: Workbooks.Open (Full_Old)

Não consegui entender o objetivo do seu código, você pode comentar ele?

Exatamente, ele ocorre no comando "Workbooks.Open (Full_Old)".

O objetivo é abrir mais de 5000 planilhas que estão dentro duma pasta com o nome sheet1.xlsx, sheet2.xlsx, sheet3.xlsx, etc, etc... e salvá-la numa outra pasta com o nove da aba dentro da planilha (nome_correto.xlsx).

Quando eu tento abrir algumas destas planilhas, ocorre um bug e o laço é pausado até eu resolver o bug manualmente. EU quero que a minha macro ignore o bug e continue a trabalhar passando por cima da planilha bugada.

Bom dia, JHenrique.

Vc já tentou, no método Open, alterar a propriedade CorrupLoad para xlRepairFile ou para xlExtractData?

Como vc não anexou arquivos estou na mesma situação do Bruno, só especulando mesmo. Inclusive não tenho nenhum corrupto aqui prá testar (e estou muito longe de Brasília também, :lol: )

HUmmm,

"CorrupLoad para xlRepairFile ou para xlExtractData"

Como uso esses comandos???

Pode me dar um exemplo?

 
Postado : 28/02/2017 8:56 am
(@mprudencio)
Posts: 2749
Famed Member
 

Um simples

On error resume next

no inicio do codigo nao resolve

Coloque depois da declaração das variaveis

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 28/02/2017 9:02 am