Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
Por saintannna
Posts
#5434
Olá.
Gostaria de uma ajuda da comunidade.
Tenho uma planilha cujas abas precisam alternadas a cada X segundos. Como seria possível fazer isso através de uma macro?

Obrigado.
Avatar do usuário
Por Parkeless
Posts Avatar
#5478
Boa tarde!

O método OnTime faz isso

Exemplo: Call Application.OnTime(Now + TimeValue("00:00:05"), "Nome_da_sua_macro_aqui")

E aí você faz uma macro que alterna a aba.

Na próxima aba, você pode criar um código worksheet_activate, para que quando ela seja ativada, ative outra ontime... e daí por diante
Avatar do usuário
Por Parkeless
Posts Avatar
#5503
Acho que dá também, tenta aí

Qualquer coisa posta a planilha com o código que você colocou, que eu dou uma olhada....
#5550
Infelizmente não consegui.

O código que montei foi este:
Public Sub Muda_Planilha()
Call Application.OnTime(Now + TimeValue("00:00:05"), Sheets("Portal Notícias 2").Select)
End Sub

Só para contextualizar:
Tenho 4 planilhas (Portal Notícias 1, Portal Notícias 2, Portal Notícias 3, Portal Notícias 4).
Ao abrir o Excel, já existe uma macro para abrir automaticamente a aba Portal Notícias 1, em tela cheia.
Depois de 5 segundos, por exemplo, deve haver a modificação para a aba Portal Notícias 2, depois de mais 5 segundos ocorre novamente a mudança para Portal Notícias 3 e, por fim, depois de mais 5 segundos, ocorre novamente a mudança para Portal Notícias 4.
Depois de mais 5 segundos, da Portal Notícias 4, deve voltar a ser apresentada a Portal Notícias 1.
Avatar do usuário
Por Parkeless
Posts Avatar
#5551
A Ontime executa uma macro; não dá pra fazer direto assim como você fez

Cria uma macro que seleciona a planilha, e depois referencia ela na ontime

Algo assim:
Código: Selecionar todos
Public Sub Muda_Planilha()
Call Application.OnTime(Now + TimeValue("00:00:05"), "Muda_1")
Call Application.OnTime(Now + TimeValue("00:00:10"), "Muda_2")
Call Application.OnTime(Now + TimeValue("00:00:15"), "Muda_3")
Call Application.OnTime(Now + TimeValue("00:00:20"), "Muda_4")
End Sub

Sub Muda_1()
Sheets("Portal Notícias 1").Select
End Sub
Sub Muda_2()
Sheets("Portal Notícias 2").Select
End Sub
Sub Muda_3()
Sheets("Portal Notícias 3").Select
End Sub
Sub Muda_4()
Sheets("Portal Notícias 4").Select
End Sub
#5586
Parkeless, novamente obrigado por ajudar.

No entanto, coloquei o código que você sugeriu dentro de "Esta pasta de trabalho", no entanto não funcionou. Você pode disponibilizar um arquivo como exemplo?

Agradeço.
#5591
Boa tarde,

Não é na planilha, é em um módulo mesmo.

Estou disponibilizando o arquivo; Vê se consegue adaptar aí.

Obs.: Ele vai passar por todas as abas uma vez, e vai parar. Se você quiser dar um loop (ir passando todas as abas até fechar a planilha), você pode criar um evento do tipo, caso a primeira aba seja ativada, rodar a macro.
Você não está autorizado a ver ou baixar esse anexo.
#5611
Era exatamente esse loop que precisava. Montei um código, mas ele não está sendo executado. Vou postá-lo aqui para análise.
Essa primeira sub é porque preciso que, além de rodar a rotina, a planilha seja aberta sempre na planilha 1 e em tela cheia.

Sub AbrirPlanilha()
Worksheet("Portal Notícias 1").Range("A1").Select
Application.DisplayFullScreen = True
End Sub

Sub Rotina()
Do While Worksheet("Portal Notícias 1").Activate
Run ("Muda_Planilha")
Loop
End Sub


Agradeço novamente.
#5613
Ajustei algumas coisas para o loop não bugar quando alguém trocar de aba manualmente... tenta aí
Você não está autorizado a ver ou baixar esse anexo.
AlissonSilva15 agradeceu por isso
Por saintannna
Posts
#5675
Parkless, deu certo. A sua dica funcionou.

Porém agora, estou com outro problema. Tem vezes em que vou abrir o arquivo e o VBA de "Esta Pasta de Trabalho" simplesmente não funciona.

Vou postar o arquivo para analisar.

Agradeço.

Ps: Existe uma outra macro que coloquei para que a hora seja atualizada de 1 em 1 segundo, Tem hora que esta macro também funciona, mas tem hora que ela não funciona. Daí, se eu for no Alt + F11, selecionar a macro e clicar no Play, ela funciona.
Você não está autorizado a ver ou baixar esse anexo.
Avatar do usuário
Por Parkeless
Posts Avatar
#5677
Boa tarde!

O problema não é o nome da planilha? O código está referenciando a planilha "Portal Notícias.xlsm", mas você renomeou para "teste.xlsm"... aqui corrigi o nome, e aparentemente está funcionando

Quanto à atualização da hora, não entendi por que você está fazendo via código :?

Existem funções para isso, e o Now do VBA também é bem preciso...
Por saintannna
Posts
#5679
Realmente Parkeless, o erro era o nome do arquivo. Falta de atenção de iniciante. Novamente obrigado.

Sobre a atualização da hora, foi uma macro que descobri na internet para fazer essa atualização automaticamente. Sobre o NOW do VBA, eu não o conheço. Já sobre funções, a qual você está se referindo? Além disso, como por função, a hora seria atualizada automaticamente?
Avatar do usuário
Por Parkeless
Posts Avatar
#5681
Olha a falta de atenção aqui também... kkk

Não tinha entendido o motivo de você ter feito a macro; pensei que era para calcular segundo a segundo manualmente. Agora eu vi que era só para aparecer os segundos conforme forem passando (é isso né? :D )

Então seu código não "calcula a hora toda hora" como pensei, mas só manda um Calculate 1x por segundo para a função AGORA atualizar o segundo. Agora tudo faz sentido :|

Depois que você alterou o nome da planilha, esse código voltou a funcionar também, ou você precisa de outro?
Por saintannna
Posts
#5682
Seu raciocínio está correto. O motivo do código era só para aparecer os segundos a medida que forem passando.

Sobre o código da planilha, depois que alterei ele voltou a funcionar corretamente, só que ainda estou com o problema que, tem vezes que abro a planilha e as macros não são executadas. Nada acontece. Quando isso acontece, se eu executar as macros manualmente através do ALT+F8, as macros funcionam e a planilha fica 100%. Daí eu tenho que salvar o arquivo, abrí-lo novamente e ai tudo funciona. Mas não é garantido que, se o arquivo for fechado outra vez ou se abrir em um outro computador, ele funcione.
Avatar do usuário
Por Parkeless
Posts Avatar
#5683
Se for o que estou pensando, isso resolve...

Troca o código:
Código: Selecionar todos
If ActiveSheet.Index <> 1 Then: Sheets(1).Activate
Por:
Código: Selecionar todos
If ActiveSheet.Index <> 1 Then
    Sheets(1).Activate
Else
    Run "Mudar"
End If
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord