Página 1 de 1

Ajuda para código VBA

Enviado: 28 Mai 2021 às 10:28
por Celsosilverio
Olá!

Option Explicit

Private Sub Worksheet_Activate()
MsgBox (" Favor GERAR RELATÓRIO para atualização.")
End Sub

Uso esse código na planilha, que é apenas um aviso. Funciona perfeito.
Ocorre que ao fechar a minha planilha esse aviso também abre, daí tenho que fechar um por um, porque eu estou utilizando uma macro para ocultar planilhas, que é a seguinte:

Sub Ocultar_planilha()
Desproteger_pasta
Sheets("REL_SAÍ").Select
ActiveWindow.SelectedSheets.Visible = False

Sheets("REL_ENT").Select
ActiveWindow.SelectedSheets.Visible = False

Sheets("MOV_ESTOQUE").Select
ActiveWindow.SelectedSheets.Visible = False

Proteger_pasta
End Sub

Teria algum jeito de adaptar para que ao fechar a planilha não aparecesse referida a mensagem?

Abraços

Re: Ajuda para código VBA

Enviado: 28 Mai 2021 às 10:47
por osvaldomp
Experimente:
Código: Selecionar todos
Sub Ocultar_planilha()
 Desproteger_pasta
 Sheets("REL_SAÍ").Visible = False
 Sheets("REL_ENT").Visible = False
 Sheets("MOV_ESTOQUE").Visible = False
 Proteger_pasta
End Sub

Re: Ajuda para código VBA

Enviado: 28 Mai 2021 às 11:43
por Celsosilverio
Olá Osvaldo,
Desculpe, mas não resolveu

Re: Ajuda para código VBA

Enviado: 28 Mai 2021 às 12:10
por osvaldomp
Olá, Celso.

Para ajudar na identificação do seu problema seria oportuno você disponibilizar diretamente aqui no fórum uma amostra do seu arquivo Excel com as 3 planilhas (podem estar vazias), todos os códigos VBA instalados, e informe com exatidão em que situações indesejadas aparece a mensagem.

Re: Ajuda para código VBA

Enviado: 28 Mai 2021 às 13:01
por Celsosilverio
Olá Osvaldo, conforme solicitado, segue em anexo

Re: Ajuda para código VBA

Enviado: 28 Mai 2021 às 13:39
por osvaldomp
Celso, com o código que passei, aqui funciona conforme o requerido, ou seja, ao fechar o arquivo as mensagens não são exibidas.
Veja se no arquivo anexo o código funciona a contento aí. É uma cópia do seu arquivo original, apenas inseri o código que passei e desativei o seu código original.

Re: Ajuda para código VBA

Enviado: 28 Mai 2021 às 16:13
por Celsosilverio
Ok Osvaldo, agora sim. Muito obrigado.

Re: Ajuda para código VBA

Enviado: 28 Mai 2021 às 16:42
por osvaldomp
Celso, por curiosidade e também para aprendizado: porque antes não funcionou? O que você havia feito de diferente do que eu fiz?

Re: Ajuda para código VBA

Enviado: 28 Mai 2021 às 17:10
por Celsosilverio
Osvaldo, aqui nesse código não funcionou:

Sub Ocultar_planilha()

Desproteger_pasta

Sheets("ENTRADAS").Select
ActiveWindow.SelectedSheets.Visible = False

'Sheets("REL_SAÍ").Select
'ActiveWindow.SelectedSheets.Visible = False
Sheets("REL_SAÍ").Visible = False

Sheets("CAD_PROD").Select
ActiveWindow.SelectedSheets.Visible = False

Sheets("CAD_FORN").Select
ActiveWindow.SelectedSheets.Visible = False

Sheets("ESTOQUE").Select
ActiveWindow.SelectedSheets.Visible = False

Sheets("SAIDAS").Select
ActiveWindow.SelectedSheets.Visible = False

Sheets("CAD_CLIENTES").Select
ActiveWindow.SelectedSheets.Visible = False

'Sheets("REL_ENT").Select
'ActiveWindow.SelectedSheets.Visible = False
Sheets("REL_ENT").Visible = False

'Sheets("MOV_ESTOQUE").Select
'ActiveWindow.SelectedSheets.Visible = False
Sheets("MOV_ESTOQUE").Visible = False

Sheets("CAPA").Select
Range("G39").Select

Proteger_pasta

End Sub


JÁ AQUI NESSE CÓDIGO, FUNCIONOU PERFEITO:

Sub Ocultar_planilha()

Desproteger_pasta

Sheets("ENTRADAS").Visible = False
Sheets("CAD_PROD").Visible = False
Sheets("CAD_FORN").Visible = False
Sheets("ESTOQUE").Visible = False
Sheets("SAIDAS").Visible = False
Sheets("CAD_CLIENTES").Visible = False
Sheets("REL_SAÍ").Visible = False
Sheets("REL_ENT").Visible = False
Sheets("MOV_ESTOQUE").Visible = False

Proteger_pasta

End Sub

Eu também não entendi o porque não funcionou :D :D

Re: Ajuda para código VBA

Enviado: 28 Mai 2021 às 19:46
por osvaldomp
Celso, o primeiro código do seu último post provoca a exibição da mensagem pelo seguinte: para algumas planilhas a serem ocultadas você manteve no código o comando Select, então o código ativa/seleciona a planilha para depois ocultá-la, e ao ocultá-la, automaticamente o Excel torna ativa/seleciona a planilha vizinha à direita daquela que foi ocultada, dessa forma, se a planilha à direita contiver o código que exibe a mensagem então "indiretamente" o código será disparado e a mensagem será exibida.

Já o segundo código oculta as planilhas sem selecioná-las, e se no momento de rodar o código a planilha ativa for a CAPA, suponho que seja esse o seu caso, essa continuará ativa até o final da execução pois ela não é ocultada pelo código, por isso a seleção/ativação não muda de planilha e assim não dispara "indiretamente" os códigos que exibem a mensagem.

A propósito, o comando Select provoca aumento no tempo de execução do código, provoca "movimentação na tela", reduz a flexibilidade na elaboração do código e raramente é necessário. Portanto, o seu uso é altamente não recomendável.

Seguem abaixo duas sugestões como alternativas.
Código: Selecionar todos
Sub Ocultar_planilha()
 Dim WS As Worksheet
  Desproteger_pasta
  For Each WS In ThisWorkbook.Worksheets
   If WS.Name <> "CAPA" Then WS.Visible = False
  Next WS
  Proteger_pasta
End Sub
Código: Selecionar todos
Sub Reexibir_planilha()
 Dim WS As Worksheet
  Application.ScreenUpdating = False
  Desproteger_pasta
  For Each WS In ThisWorkbook.Worksheets
   WS.Visible = True
  Next WS
  Sheets("CAPA").Activate
  Range("G39").Select
  Proteger_pasta
End Sub

Re: Ajuda para código VBA

Enviado: 28 Mai 2021 às 20:55
por Celsosilverio
Agora entendi. Ficou top.
Valeu amigo, um abraço