Notifications
Clear all

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

20 Posts
1 Usuários
0 Reactions
4,645 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
 

Caros Reinaldo e Mauro, realmente vc's estão certos, parabéns.

Fiz os testes com as planilhas do Mauro, e tudo ocorreu bem!

Refiz os teste, com as minhas planilhas e ambas funcionaram tb. Porém, esbarrei na minha ignorância qto a esse processo que para mim é novo.

Se, antes todoas as minha macros estavam num módulo, agora pelo que entendi, preciso transportá-las para o local "EstaPasta_de_trabalho" no VBA, adicionando:

Option Explicit

Private Sub Workbook_Open()

    MsgBox "TESTE"
    
End Sub

Até aqui, com o MsgBox tudo bem, o problema é qdo tento chamar as macros por "Call", me me retorna a msg:

Fiz dois testes: 1) tentando chamar as macros no módulo; 2) Eliminando o módulo e deixando as macros no local "EstaPasta_de_trabalho".

Não quero incomodá-los, mas em anexo a planilha como trabalho. Se puderem me dizer como faço para rodar as macros que estão nelas, pelo modo "Workbook_Open", acho que finalizamos.

Grato.

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

Ampliato, aqui no serviço não temos a v 2007, mas se entendi, você pode manter os Modulos normalmente, não é necessário transpotar as macros, mas se muda-las tambem não fará diferença, quando utilizamos o Evento WorkBook_Open, geralmente é para adicionarmos rotinas que queremos que seja executada ao abrir o arquivo sem precisar utilizar Botões, automaticamente, a mesma pode tanto conter as instruções diretamente como ter somente a chamada :

Abre o msgbox ao abrirmos o arquivo, ok

Private Sub Workbook_Open()
    MsgBox "TESTE"
End Sub

Aquii uma rotina qualquer adicionada a um Módulo ou na tela Geral das Declarações de Esta Pasta de Trabalho :

Private Sub MsgBox()
    MsgBox "TESTE"
End Sub

Executará a rotina acima ao abrir o arquivo.

Private Sub Workbook_Open()
    Call MsgBox
End Sub

[]s

 
Postado : 15/03/2012 8:24 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ampliato,
Qdo uma rotina está "definida" como Private, para chama-la, dentro do mesmo modulo, e usado Call ; porem em um outro modulo(nesse caso nos eventos "esta pasta.." é recomendafo utilizar o metodo Application.run. Então mantendo suas rotinas no modulo "FATU", apage a rotina Auto_open; e em "esta pasta..." coloque assim:

Private Sub Workbook_Open()
    Application.Run "'Faturamento.xlsm'!CONFERIR_TODOS_FILTROS"
End Sub
 
Postado : 15/03/2012 9:16 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Agora Fechou!!!

Reinaldo e Mauro, vc's são fera, resolvi o problema.

Uma última questão para deixar esse assunto perfeito.

Quando usava o Auto_Open eu utilizava o "ActiveWorkbook.RunAutoMacros xlAutoOpen" para que as macros auto open fossem executadas.

Agora, utilizando o "Workbook_Open()", quando houver casos onde eu queira desabilitar a execução desse evento, como faço?

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

Caros, com a desabilitação de Eventos, resolvi o problema.

Application.EnableEvents = False 
 'your code
Application.EnableEvents = True

Mais uma vez, muito obrigado!

 
Postado : 16/03/2012 11:26 am
Página 2 / 2