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
#45730
Bom dia!
Alguém saberia me dizer o que está errado nesse código? Quando executo, a fórmula fica como falso na regra de formatação condicional


Sub REGRA1()
'
' REGRA1 Macro
'

'
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
Selection.Cells.Value = Now
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent4
.TintAndShade = 0.599963377788629
End With
Selection.FormatConditions(1).StopIfTrue = False
Next
End Sub

Gostaria de criar um macro para executar uma formação condicional na linha selecionada.
Avatar do usuário
Por Jimmy
Avatar
#45739
Olá Juliana,

Veja se isto te ajuda.
Código: Selecionar todos
Sub REGRA1()
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=" & Selection.Cells.Address & "=agora()"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
    .PatternColorIndex = xlAutomatic
    .ThemeColor = xlThemeColorAccent4
    .TintAndShade = 0.599963377788629
End With
Selection.FormatConditions(1).StopIfTrue = False
'Next
End Sub
Três observações:

- Há um NEXT na penúltima linha, mas não há um FOR aberto anteriormente, logo, o NEXT causa erro.

- A macro não criará a condicional na linha selecionada, como você mencionou, mas nas células selecionadas, podendo inclusive serem de linhas diferentes (Ex: selecionando C4:F10)

- Now, que no Excel em português é o Agora() tem a duração de 1 segundo, logo, a célula formatada ficaria pintada por apenas 1 segundo (isso se der sorte do excel recalcular aquela célula naquele instante). Se pretende marcar quando um determinado momento for alcançado, recomendo usar ">" ou "<" (dependendo da finalidade) ao invés de "=", pois o "=" é efêmero.

Jimmy
#45744
Olá Jimmy!

Muito obrigada!
Alterei o "agora" para "hoje", pois preciso apenas da data, e deu certo.

Sub REGRA1()
'Regra hoje
If Selection.FormatConditions.Delete Then
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=" & Selection.Cells.Address & "=hoje()"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent4
.TintAndShade = 0.599963377788629
End With
Selection.FormatConditions(1).StopIfTrue = False

Preciso também colocar mais duas condições na mesma linha:
A primeira seria pintar a linha toda se a célula selecionada for menor que hoje e a célula da direita estiver em branco, e pintar a linha de outra cor se a célula selecionada for menor que a célula da direita

Fiz assim mas sei que não está certo, se puder me ajudar agradeço.

'Regra Atrasado
Else: Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=" & Selection.Cells.Address & "<hoje()"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 10461183
.TintAndShade = 0.599963377788629
End With
Selection.FormatConditions(1).StopIfTrue = False

'Regra Entregue Atrasado
Else: Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=" & Selection.Cells.Address & "I:<hoje()"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 10461184
.TintAndShade = 0.599963377788629
End With
Selection.FormatConditions(1).StopIfTrue = False

Obrigada!
Avatar do usuário
Por Jimmy
Avatar
#45751
Juliana, tem sim.

Gostaria que você enviasse uma planilha modelo para que possamos trabalhar sobre ela. Assim seremos mais precisos.

Mande exemplos das situações, explicando porque está ou não pindata.

No post anterior você falou em "pintar a linha toda". Acho que não deve ser toda; especifique qual a faixa da linha. Note que as células que serão pintadas terão formatação condicional também.

Jimmy
#45764
Ok Jimmy, segue anexo.

Mandei apenas um exemplo com a formatação condicional para você entender.

Nesse caso, gostaria de colocar um botão com macro para ir adicionando linhas na planilha já com a formatação condicional.

Obrigada pela atenção!
Você não está autorizado a ver ou baixar esse anexo.
Avatar do usuário
Por Jimmy
Avatar
#45782
Juliana,

Veja se te atende. Faça muitos testes.

Eu coloquei o botão na célula C1, mas pode ser mudado.

É possível também acionar a macro pelo teclado, sem usar o botão. Basta segurar as teclas CTRL + SHIFT pressionadas, e teclar Q.

Jimmy
Você não está autorizado a ver ou baixar esse anexo.
Avatar do usuário
Por Jimmy
Avatar
#45814
Disponha Juliana,

Se está tudo resolvido, não esqueça de encerrar o tópico pois isso ajuda a organizar melhor o forum.

Jimmy San Juan
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