Notifications
Clear all

[Resolvido] ALTERAR COR DA GUIA CONFORME A DATA CORRENTE

11 Posts
4 Usuários
7 Reactions
2,239 Visualizações
(@gleisom)
Posts: 0
New Member
Topic starter
 

Olá, pessoal!

Anexei um arquivo em que existe uma tabela em cada uma das três guias, em cuja coluna A constam algumas datas. Eu precisava que a cor dessas guias alterassem automaticamente caso alguma data dessa coluna A fosse igual à data corrente, por exemplo, caso seja dia 30/07/2020 e na coluna A da guia Plan1 exista data igual ao dia 30/07/2020 e na coluna A da guia Plan3 também, por exemplo, a cor dessas guias mudaria pra vermelho.

Isso seria possível?

Desde já agradeço muito a todos que puderem ajudar.

 

Abraço!


P.S.: Esqueci de falar que a planilha fica aberta, e que esse comportamento precisa ocorrer em real time, sem estar associado a algum tipo de botão etc. Não sei quais eventos seriam mais adequados para isso, talvez quando ocorresse alguma modificação em alguma célula, mas dai no cado da planilha aberta sem sofrer modificação e a data corrente mude não sei se funcionaria.

   Editado pela moderação: Você pode editar sua mensagem clicando no botão Editar logo abaixo , ao invés de criar nova postagem 😉 .

Este tópico foi modificado 4 anos atrás by Gleisom
 
Postado : 27/07/2020 11:48 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Gleisom,

 

Boa tarde!

 

Fiz da seguinte forma:

1 - Assim que o arquivo é aberto o código procura por datas coincidentes com a data do dia em cada uma das abas. Se encontrar, colore a aba de vermelho. A partir desse momento (em que o arquivo fica aberto), o código passa a monitorar a cada 5 minutos (configurável pelo código. Você pode alterar para mais ou para menos tempo conforme a sua necessidade) todas as datas de todas as abas. Se encontrar uma que coincida com a data atual, colore a aba de vermelho.

 

Veja se é assim.

 
Postado : 27/07/2020 1:07 pm
EdsonBR and Gleisom reacted
(@edsonbr)
Posts: 0
New Member
 

Considerei que os monitoramentos abrangeriam os eventos em que a pasta de trabalho é aberta, sempre que outra planilha da pasta for ativada, sempre que ocorrer inserção de dados manualmente ou sempre que ocorrer alteração por fórmula. Não considerei monitorar por intervalo de tempo.

Dependendo de como vai ficar seu projeto final (a cadeia de dependências), dá pra refinar e ser mais específico, reduzindo o tempo de processamento. Por exemplo, se na coluna das datas elas forem inseridas manualmente, daria pra dispensar o evento SheetCalculate. Se forem fórmulas que estarão ali, então o evento dispensável seria o SheetChange, e por aí vai.

Insira o código no container de eventos em nível de Workbook (EstaPastaDeTrabalho):

Private Sub Workbook_Open()
MudaCorGuia
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
MudaCorGuia
End Sub

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
MudaCorGuia
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
MudaCorGuia
End Sub

Private Sub MudaCorGuia()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.ListObjects.Count >= 1 Then
If Application.CountIf(ws.ListObjects(1).ListColumns(1).DataBodyRange, Date) >= 1 Then
ws.Tab.Color = vbRed
Else
ws.Tab.ColorIndex = xlNone
End If
End If
Next ws
End Sub

 

 

 
Postado : 27/07/2020 1:20 pm
Gleisom reacted
(@gleisom)
Posts: 0
New Member
Topic starter
 

Wagner, obrigado pela atenção e pela ajuda.

No caso dessa sua solução, caso eu aumentasse o tempo de verificação, haveria a possibilidade de associar essa verificação quando eu clicasse em qualquer célula, por exemplo?

Outra coisa, depois a que a guia muda de cor, quando excluo a(s) data(as) que desencadearam o comportamento, a cor não volta ao normal.

 

 
Postado : 27/07/2020 1:45 pm
(@gleisom)
Posts: 0
New Member
Topic starter
 

Edson, muito obrigado também pela atenção e pela ajuda.

Na sua solução eu consigo excluir a data que fez a cor da guia mudar e com isso voltar ao normal a cor da guia. Como essa planilha as vezes pode ficar aberta de um dia para o outro sem que ocorra qualquer alteração ou sem que interaja com ela, é possível adaptar o comportamento do código para que ele ocorra também em determinado intervalo de tempo? Ou seja, manter isso que você fez (está perfeito) e acrescentar a ideia do tempo igual o Wagner fez.

Outra coisa, percebi que quando insiro nova aba a mudança de cor só funciona até a terceira aba. Seria possível funcionar independentemente da quantidade de aba e levando em consideração inclusão/exclusão de guias?

 
Postado : 27/07/2020 1:55 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

OK. Problema da cor resolvido e agora, quando selecionar qualquer célula, o código é disparado a procura de datas iguais a data do dia, além de ainda está monitorando a cada 5 minutos.

 
Postado : 27/07/2020 3:45 pm
Gleisom reacted
(@edsonbr)
Posts: 0
New Member
 

Ok, no módulo do Workbook:

Private Sub Workbook_Open()
  usarTimer = True
  MudaCorGuia
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  usarTimer = False
  MudaCorGuia
  usarTimer = True
End Sub

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
  usarTimer = False
  MudaCorGuia
  usarTimer = True
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  usarTimer = False
  MudaCorGuia
  usarTimer = True
End Sub
 

Num módulo comum:

 Public usarTimer As Boolean
Sub MudaCorGuia()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.ListObjects.Count >= 1 Then
If Application.CountIf(ws.ListObjects(1).ListColumns(1).DataBodyRange, Date) >= 1 Then
ws.Tab.Color = vbRed
Else
ws.Tab.ColorIndex = xlNone
End If
End If
Next ws
If usarTimer Then Application.OnTime Now + TimeValue("00:15:00"), "MudaCorGuia"
End Sub
Postado por: @gleisom

...percebi que quando insiro nova aba a mudança de cor só funciona até a terceira aba.

O código leva em conta todas as abas da planilha (For Each ws In ThisWorkbook.Worksheets) onde tem pelo menos uma tabela (If ws.ListObjects.Count >= 1), pois de acordo com seu 1º Post

Postado por: @gleisom

existe uma tabela em cada uma das três guias, em cuja coluna A constam algumas datas

Se ao invés de tabela vc for usar intervalo normal, aí o código teria que ser alterado. O amigo Wagner considerou intervalo, portanto poderia usar tranquilamente o código que ele escreveu ao invés deste.

Obs.: no código acima, a atualização ocorrerá à cada 15 minutos.

 
Postado : 27/07/2020 4:06 pm
Wagner Morel and Gleisom reacted
(@gleisom)
Posts: 0
New Member
Topic starter
 

Show de bola, muito obrigado, vocês me ajudaram muito, agradeço de coração a atenção de vocês. Grande abraço!

 
Postado : 28/07/2020 3:37 pm
EdsonBR reacted
(@kaleo_rs)
Posts: 0
New Member
 

@wagner-morel-vidal-nobre

Sabe me dizer como foi feito a delimitação do FILTRO da Coluna A até a Linha 8.

Eu percebi que na célula A8 no canto inferior direito existe um pontinho onde é o limitador do FILTRO.

 
Postado : 07/08/2020 4:46 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

@kaleo_rs

 

Bom dia!

Infelizmente, não sei.

 
Postado : 10/08/2020 8:31 am
(@edsonbr)
Posts: 0
New Member
 

Bom dia, @Kaleo_rs

O intervalo foi definido como uma Tabela (um ListObject), aqueles que normalmente são zebrados, por padrão em dois tons de azul. Talvez vc não tenha reconhecido pq foi escolhida como formatação "Nenhuma" para elas. Note que, se vc entrar em qualquer célula, aparece um menu de contexto "Tabela" na faixa de opções.

Postado por: @kaleo_rs

...Eu percebi que na célula A8 no canto inferior direito existe um pontinho onde é o limitador do FILTRO.

Aquela cantoneira no canto inferior direito é conhecida como "alça de redimensionamento", na realidade não tem função de filtro. Arrastando ela vc aumenta ou encolhe sua tabela.

 

 
Postado : 10/08/2020 10:13 am