Notifications
Clear all

VBA - Excel - Rotina não abre todos os "Auto_Open"

20 Posts
1 Usuários
0 Reactions
4,644 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Caros, boa tarde!

Fiz um rotina em VBA, que abre todos os arquivos listados em células pré-definidas. Essa rotina, apenas:

• Abre o arquivo;
• Atualizar todas as tabelas dinâmicas
• Executa a macro "Auto_Open" do arquivo aberto
• Fecha o arquivo salvando-o

Mas acontece uma coisa bizarra e não estou conseguindo identificar onde está o problema. No meu caso, eu enderecei 6 arquivos para ele abrir e completar a rotina, mas o segundo arquivo ele nunca executa o "Auto_Open". Se na lista de arquivos eu inverter a posição entre o segundo e o terceiros arquivo, por exemplo, ele continua com a falha no segundo arquivo (o que elimina a hipótese de o problema estar no arquivo, até pq se eu abrir o arquivo separadamente - sem ser por macro - o "Auto_Open" é executado)

A rotina é essa:

Sub Auto_Open()

    Dim Loc As String
    Dim Arq As String

decisao = MsgBox("Deseja ATUALIZAR todos os bancos de dados?", vbYesNo, "AVISO")
If decisao = vbYes Then

For i = 1 To 25

    Sheets("PC").Select
    Range("B14").Select

Loc = ActiveCell.Offset(i, 0).Value 'B15
Arq = ActiveCell.Offset(i, 2).Value 'D15
Pas = ""

    If Loc <> "" And Arq <> "" Then

    Workbooks.Open Filename:=Loc & Arq, Password:=Pas 'Abre o arquivo protegido com senha
    Application.DisplayAlerts = False 'Elimina os alertas na planilha aberta
    ActiveWorkbook.RefreshAll 'Atualizar todas as tabelas dinâmicas
    ActiveWorkbook.RunAutoMacros xlAutoOpen 'Manda executar as macros Auto_Open no arquivo
    Windows(Arq).Close True 'True 'Fecha o arquivo salvando-o

    Else
    On ERRO GoTo Fim

End If

Next
End Sub

Algum de vc's pode me ajudar a encontrar a falha e corrigí-la?

Grato.

 
Postado : 14/03/2012 9:08 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia!!

Poderia postar seu arquivo(COMPACTADO)?

 
Postado : 14/03/2012 9:12 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia!!

Poderia postar seu arquivo(COMPACTADO)?

Alexandre, o arquivo é bem grande, mas eu reduzi ele a somente o que interessa para este tópico.

Está em anexo.

Grato.

 
Postado : 14/03/2012 9:32 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia!!

Porque não tenta o evento Private Sub Workbook_Open(

Private Sub Workbook_Open()

MsgBox "oi"

End Sub
 
Postado : 14/03/2012 9:33 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Alexandre,

Não funcionou com "Private Sub Workbook_Open()"

 
Postado : 14/03/2012 9:37 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia!!

Dentro de EstPasta_de_Trabalho, coloque
Atenção: Mude o nome do seu Modulo para (ABD), para não ficar igual a rotina, faça o teste!!

Private Sub Workbook_Open()

AtualizarBD



End Sub
 
Postado : 14/03/2012 9:40 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia!!

Vou te mandar seu anexo, já pronto.

baixe..
http://www.sendspace.com/file/uzn9aa

Att

 
Postado : 14/03/2012 9:48 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Experimente tambem
altere o codigo

    If Loc <> "" And Arq <> "" Then

    Workbooks.Open Filename:=Loc & Arq, Password:=Pas 'Abre o arquivo protegido com senha
    Application.DisplayAlerts = False 'Elimina os alertas na planilha aberta
    Windows(Arq).Activate
    
    With ActiveWorkbook
    .RunAutoMacros xlAutoOpen
    .RefreshAll
    .Close False
    End With

    'ActiveWorkbook.RefreshAll 'Atualizar todas as tabelas dinâmicas
    'ActiveWorkbook.RunAutoMacros xlAutoOpen 'Manda executar as macros Auto_Open no arquivo
    'Windows(Arq).Close False 'True 'Fecha o arquivo salvando-o

    Else

End If
 
Postado : 14/03/2012 9:52 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo, eu alterei o código conforme sua sugestão, mas o problema persiste.

Alex, aqui na empresa é bloqueado para fazer doownload's... quando chegar em casa eu testo, ou se puder mandar no mail: "pvt"

Agradeço a força galera.

 
Postado : 14/03/2012 11:12 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde!!
Confirme i pra ver se vai chegar o Email.

É pvt.com? Editado

 
Postado : 14/03/2012 11:19 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Alexandre, recebi sim... eu não coloquei o endereço completo para que não seja rastreável aos spamer's, se puder apagar aquela msg eu agradeço.

Qto a planilha, bom, eu devo ter me expressado mau... Não é o "Auto_Open" da planilha fonte, no caso da que te enviei "INDICADOR_GERAL", é o "Auto_Open" de cada planilha que ele abre pela macro.

Vc percebeu que aquela rotina, abre um a um todos os arquivos que escrevi nas células pré-determinadas, e para cada arquivo que ele abre, tem um "Auto_Open" próprio desse arquivo. O problema que estou enfrentando é que segundo a relação, o segundo arquivo e tb o 4º ele abre normalmente mas não executa i "Auto_Open" daquele arquivo, ou seja, a rotina em suma é:
1) Abrir um arquivo;
2) Executar o "Auo_Open" do arquivo aberto;
3) Fechar o arquivo;
4) Abri o próximo arquivo... etc...

Quando ele vai abrir o 2º o "Auto_Open" não executa, já no 3º arquivo sim... no 4º tb não, já no 5º sim. Entendeu?

 
Postado : 14/03/2012 11:30 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Do help do excel,

Referência do Desenvolvedor do Excel
Workbook.Método RunAutoMacros
Executa a macro Auto_Open, Auto_Close, Auto_Activate ou Auto_Deactivate anexada à pasta de trabalho. Esse método é incluído para compatibilidade com versões anteriores. Para código novo do Visual Basic, você deve usar os eventos Open, Close, Activate e Deactivate em vez dessas macros.

Se vc alterar essas rotinas "auto_open", para os eventos "workbook open" de cada planilha (com certeza o trabalho inicial será gde), a mesma qdo do comando "open", automaticamente deverá executar essas rotinas individuais; ficando o seu "menu" sómente com a incumbencia de abrir e fechar esses arquivos.

Outra coisa
altere no

.close false
para
.close SaveChanges:=True

 
Postado : 14/03/2012 11:59 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo, obrigado pelas dicas.

Porém continuo sem sucesso! Realmente não sei o que estou fazendo errado.

 
Postado : 14/03/2012 12:27 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Em principio não há nada errado, porem não funciona para todos, o que é estranho.
Como não dispomos das planilhas envolvidas e do caminho (rede); podemos fazer suposições, então:
Tente fazer no modo depuração, abra sua rotina "menu";no editor vba, posicione o cursor em sub AtualizarBD() e vá teclando F8,
acompanhando passo a passo como se desenrola a rotina. Iniba ou apage da linha referente ao close o Savechanges; e veja se
em algum momento apresenta algo diferente do esperado.
Experimente tb efetuar essa "manutenção" localmente e não na rede(copie as planilhas envolvidas no micro local)

 
Postado : 14/03/2012 12:45 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ampliato, a dica do Reinaldo quanto a "Referência do Desenvolvedor do Excel " é valida, se pesquisar na Net irá ver que não aconselham mais utilizar "Sub Auto_Open" para versões mais novas, devido a mesma estar ocasionando alguns erros.

Uma vez que não tenho como recriar a Rede, fiz alguns testes criando 5 arquivos e colocando-os na mesma Pasta do arquivo Origem, nos testes obtive :

Primeiro Teste : - Ao excutar a rotina Sub AtualizarBD(), os arquivos que conteem a instrução Sub Auto_Open() abriram e curiosamente pularam a instrução, se comportando da maneira que citou, e o mais curioso, é que executando Passo a Passo, ou seja utilizando "F8" o fato não ocorre.

Segundo Teste : Apaguei as rotinas "Sub Auto_Open()" dos arquivos colocando-as no Evento "Private Sub Workbook_Open" e executei a Sub AtualizarBD(), todos os arquivos foram abertos na sequencia e as rotinas respectivas executadas.

Resumindo, se você colocou as mesmas no Evento do WorkBook deve apagar as Sub Auto_Open, não podemos ter as duas.

Uma outra obs, é que se utilizarmos o Evento do WorkBook, podemos desabilitar a seguinte linha :
'Utilizando o Evento Workbook_Open podemos desconsiderar esta Linha
ActiveWorkbook.RunAutoMacros xlAutoOpen 'Manda executar as macros Auto_Open no arquivo

Baixe o arquivo anexo, descompacte em uma pasta qualquer, são 6 arquivos, o arquivo principal é o TesteMauro.xlsm, abra e ajuste o caminho da Pasta, os outros seriam os que iremos abrir com a rotina e coloquei uma MsgBox quando cada um for aberto, emitindo a mensagem com o nome do mesmo.

Faça os testes e, retorne.

[]s

 
Postado : 14/03/2012 7:37 pm
Página 1 / 2