Notifications
Clear all

Macro executa em todas as planilhas

15 Posts
3 Usuários
0 Reactions
1,689 Visualizações
(@shroeder)
Posts: 0
New Member
Topic starter
 

Olá,

Criei uma macro numa planilha que executa outra macro a cada 5 segundos. Essa macro verifica, se as abas estiverem visíveis, encerra o excel.

O problema está que quando abro outra planilha para trabalhar em simultâneo, a macro executa também na nova planilha, e como deteta as abas visiveis, fecha as 2 planilhas.

Tem como executar a macro apenas numa planilha?

Obrigado.

Cumps

 
Postado : 01/02/2016 10:18 am
(@mprudencio)
Posts: 0
New Member
 

Qual o codigo que vc esta usando????

O ideal é postar o codigo com o arquivo que deve funcionar corretamente

 
Postado : 01/02/2016 10:20 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde Shroeder,

Utiliza a expressão "ThisWorkbook" no código que vai funcionar apenas na pasta de trabalho (planilha) que estiver o código.

Qualquer coisa da o grito.
Abraço

 
Postado : 01/02/2016 10:29 am
(@shroeder)
Posts: 0
New Member
Topic starter
 

Obrigado pela ajuda mas já tentei o ThisWorkBook em alguns lugares do código e não estou a conseguir.

Sub SuaMacro()
'Código de sua macro aqui
If ActiveWindow.DisplayWorkbookTabs = True Then
Dim Resultado As VbMsgBoxResult
Resultado = MsgBox("Tem a certeza que quer ver os separadores?", vbYesNo, "Dúvida")
If Resultado = vbYes Then
MsgBox ("Até breve!")
Application.Quit
ActiveWorkbook.RefreshAll
ThisWorkbook.Close SaveChanges:=False
Else
ActiveWindow.DisplayWorkbookTabs = False
End If

End If
'Chama a rotina temporizador, que executará a
'SuaMacro após o tempo definido
Call Temporizador
End Sub

Sub Temporizador()
'Chama a rotina SuaMacro após 10 minutos
Call Application.OnTime(Now + TimeValue("00:00:01"), "SuaMacro")
End Sub

 
Postado : 01/02/2016 10:38 am
(@mprudencio)
Posts: 0
New Member
 

Nesta macro nao tem erros pra causar o que vc descrevee nela nao tem nenhuma instrução que delete qualquer aba.

Basta ver que nao tem Delete em nenhum local.

Como eu disse poste o arquivo, assim ajuda vem na medida....

 
Postado : 01/02/2016 10:48 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Marcelo, não é para deletar.... é para fechar o Excel.

Vou dar uma analisada no código Shroeder. Um momento...

 
Postado : 01/02/2016 10:50 am
(@mprudencio)
Posts: 0
New Member
 

Verdade Bernardo, entao o problema esta aqui...

Application.Quit

A principio é so trocar por

Activeworkbook.close

Vai fechar uma so

O codigo application.quit encerra o excel activeworkbook.close fecha a planilha ativa.

 
Postado : 01/02/2016 10:58 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde Shroeder,

Tenta assim:

Option Explicit

Sub SuaMacro()
Dim wb          As Workbook
Dim Resultado   As VbMsgBoxResult

    Set wb = ThisWorkbook
    
    'Código de sua macro aqui
    If Windows(wb.Name).DisplayWorkbookTabs = True Then
    
    Resultado = MsgBox("Tem a certeza que quer ver os separadores?", vbYesNo, "Dúvida")
        If Resultado = vbYes Then
        MsgBox ("Até breve!")
        Application.Quit
        Windows(wb.Name).RefreshAll
        wb.Close SaveChanges:=False
        Else
        Windows(wb.Name).DisplayWorkbookTabs = False
        End If
    
    End If
    'Chama a rotina temporizador, que executará a
    'SuaMacro após o tempo definido
    Call Temporizador
End Sub

Sub Temporizador()
    'Chama a rotina SuaMacro após 10 minutos
    Call Application.OnTime(Now + TimeValue("00:00:01"), "SuaMacro")
End Sub

Marcelo, o problema não é apenas esse.
Ele quer executar duas planilhas ao mesmo tempo e não consegue pois o código verifica o Excel todo e deve verificar apenas uma planilha.
Faz essa correção, executa o código e abre uma nova pasta de trabalho em branco para testar.

Qualquer coisa da o grito.
Abraço

 
Postado : 01/02/2016 11:02 am
(@mprudencio)
Posts: 0
New Member
 

Bernardo Application. Quit vai encerrar o excel tendo 1, 2, ou 10 arquivos abertos.

Se nao trocar como eu disse vai sempre fechar os dois arquivos

 
Postado : 01/02/2016 11:40 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ok Marcelo.
Desde a comunidade você não muda cara...
Vou aguardar a posição do Shroeder.

 
Postado : 01/02/2016 11:49 am
(@mprudencio)
Posts: 0
New Member
 

Bernardo eu posso estar enganado e o problema nao ser somente este como vc disse mas, que vai fechar todo o excel isso vai.

Vamos aguardar

 
Postado : 01/02/2016 11:55 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Marcelo, falei que você não muda por falta de interpretação.

Pelo visto, também não fez o que disse... O problema não é fechar o Excel todo. O problema é que mesmo "corrigindo" isso que você falou, ele não vai conseguir trabalhar com duas planilhas abertas ao mesmo tempo e que as duas demonstre tudo que deve ser demonstrado.

Apenas uma planilha deve fazer a verificação da exibição das abas, se ele abrir uma outra planilha, ela deve funcionar da maneira que ela foi feita, exibindo as abas, e esse código não permite isso.

O que você sugeriu é uma "ideia" também, mas não o que foi pedido, logo, não resolveria o problema.

Qualquer coisa da o grito.
Abraço

 
Postado : 01/02/2016 12:02 pm
(@shroeder)
Posts: 0
New Member
Topic starter
 

Obrigado. Resolveu em parte.

Agora ao sair, pergunta sempre se desejamos gravar. Antes, saía logo.

Cumps

 
Postado : 01/02/2016 12:15 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Sair de onde Shroeder?
Fechar a planilha?

altera a posição do salvamento:

    Option Explicit

    Sub SuaMacro()
    Dim wb          As Workbook
    Dim Resultado   As VbMsgBoxResult

        Set wb = ThisWorkbook
       
        'Código de sua macro aqui
        If Windows(wb.Name).DisplayWorkbookTabs = True Then
       
        Resultado = MsgBox("Tem a certeza que quer ver os separadores?", vbYesNo, "Dúvida")
            If Resultado = vbYes Then
            MsgBox ("Até breve!")
            wb.Close SaveChanges:=False
            Application.Quit
            Windows(wb.Name).RefreshAll
            Else
            Windows(wb.Name).DisplayWorkbookTabs = False
            End If
       
        End If
        'Chama a rotina temporizador, que executará a
        'SuaMacro após o tempo definido
        Call Temporizador
    End Sub

    Sub Temporizador()
        'Chama a rotina SuaMacro após 10 minutos
        Call Application.OnTime(Now + TimeValue("00:00:01"), "SuaMacro")
    End Sub

Qualquer coisa da o grito.
Abraço

 
Postado : 01/02/2016 12:32 pm
(@shroeder)
Posts: 0
New Member
Topic starter
 

Uma vez mais, obrigado pela colaboração.

Ficou a funcionar na perfeição.

O código final foi este:

Sub SuaMacro()
'Código de sua macro aqui
Dim wb As Workbook
Dim Resultado As VbMsgBoxResult

Set wb = ThisWorkbook

If Windows(wb.Name).DisplayWorkbookTabs = True Then
Resultado = MsgBox("Tem a certeza que quer ver os separadores?", vbYesNo, "Dúvida")
If Resultado = vbYes Then
MsgBox ("Até breve!")
wb.Close SaveChanges:=False
ActiveWorkbook.Quit
ActiveWorkbook.RefreshAll
Else
ActiveWindow.DisplayWorkbookTabs = False

End If

End If
'Chama a rotina temporizador, que executará a
'SuaMacro após o tempo definido
Call Temporizador
End Sub

Sub Temporizador()
'Chama a rotina SuaMacro após 10 minutos
Call Application.OnTime(Now + TimeValue("00:00:01"), "SuaMacro")
End Sub

 
Postado : 02/02/2016 4:16 am