Retornar cor da célula!

Visual Basic for Aplication e macros no Excel.
Regras do fórum
Sua dúvida foi respondida? Marque como RESOLVIDO em seus tópicos, usando o botão com marca verde. Imagem

Retornar cor da célula!

Mensagempor Ander39 » Qui Fev 20, 2020 3:43 pm

Olá Boa tarde,

Tenho uma planilha onde eu uso formatação condicional para separar dados diferentes, como se fosse um cruzamento de dados entre duas colulas, dai eu coloco pra pintar de amarelho os dados que são diferentes. Estou tentando criar uma macro para separar esses dados que estão pintados em amarelho, mas a macro me retorna uma cor que simplesmente não existe, retorna o valor : -4142 Já usei rertorno como RGB, decimal e por ai vai ...

Código: Selecionar todos
While Sheets(nomeAba).Range("B" & linha).Value <> ""
If Sheets(nomeAba).Range("B" & linha).Interior.Color = 65535 Then        ' não entra no if

'Sheets(nomeAba).Cells(linha, 2).Interior.ColorIndex = 65535                 ' cor amarela em decimal
'Sheets(nomeAba).Cells(linha, 2).Interior.Color = 65535                         ' cor amarela' em decimal
'Sheets(nomeAba).Cells(linha, 2).Interior.Color = RGB(255, 255, 0)         ' cor amarela' em RGB
'Sheets(nomeAba).Cells(linha, 2).Interior.ColorIndex = RGB (255,255,0) ' cor amarela em RGB

end if
linha = linha + 1
Wend
Else
    MsgBox "Planilha Vazia !"
End If

Porem se eu usar as cores acima pra pintar uma unica célula ela fica igual as celulas que eu não consigo pegar a cor.

Código: Selecionar todos
Sub Pinta_Celula()
ActiveSheet.Cells(1, 3).Interior.Color = RGB(255, 255, 0)
End Sub

Quando eu pinto uma celula usando a palheta de cores do menu inicial do excel retorna a cor correta.

Vou anexar algumas imagens para melhor entendimento.

Att,

Anderson S. Dorneles
Você não está autorizado a ver ou baixar esse anexo.
Ander39
Membro
Membro
 
Mensagens: 19
Registrado em: Seg Jun 10, 2019 3:19 pm
Has thanked: 4 times
Have thanks: 1 time

{ SO_SELECT }

Testei e funcionou sem nenhum erro

Mensagempor klarc28 » Sex Fev 21, 2020 7:35 am

Código: Selecionar todos
Sub testeColor()

Dim nomeAba As String
Dim linha As Long
linha = 1

nomeAba = Planilha1.Name

If Sheets(nomeAba).Range("B" & linha).Interior.Color = 16777215 Then

MsgBox "Amarelo"

End If



End Sub

Código: Selecionar todos
Sub testeColorIndex()

Dim nomeAba As String
Dim linha As Long
linha = 1

nomeAba = Planilha1.Name

If Sheets(nomeAba).Range("B" & linha).Interior.ColorIndex = -4142 Then

MsgBox "Amarelo"

End If

End Sub

Código: Selecionar todos
Sub resultado2()
Dim nomeAba As String
Dim linha As Long
Dim resultado As String
Dim NOME2 As String
Dim linha2 As Long
Dim I As Integer
Dim linha4 As Long
Dim j As Long
Dim k As Long
Dim achou As Boolean
Dim m As Integer
    NOME2 = Planilha1.Name + "_Resultado"
   
    For I = 1 To ThisWorkbook.Sheets.Count
    If Sheets(I).Name = NOME2 Then
    Application.DisplayAlerts = False
   
    Sheets(I).Delete
    Application.DisplayAlerts = True
    End If
   
    Next I
    Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = NOME2
nomeAba = Planilha1.Name
'NOME2 = Planilha2.Name
linha = 2
'UserForm1.TextBox3.Text = ""
'UserForm1.TextBox3.MultiLine = True
linha3 = 2

While Sheets(nomeAba).Range("A" & linha3).Value <> ""

linha3 = linha3 + 1


Wend

linha3 = linha3 - 1


linha4 = 2

While Sheets(nomeAba).Range("B" & linha4).Value <> ""

linha4 = linha4 + 1


Wend

linha4 = linha4 - 1



For j = 2 To linha4
achou = False
For k = 2 To linha3

If Sheets(nomeAba).Range("B" & j).Value = Sheets(nomeAba).Range("A" & k).Value Then

achou = True
End If

Next k

If achou = False Then

    linha2 = 2
    While Sheets(NOME2).Range("B" & linha2).Value <> ""
   
   
    linha2 = linha2 + 1
   
   
    Wend

For m = 2 To 18

Sheets(NOME2).Cells(linha2, m).Value = Sheets(nomeAba).Cells(j, m).Value

If m = 2 Then

Sheets(NOME2).Cells(linha2, m).Interior.ColorIndex = 6
End If

Next m

    'Sheets(nomeAba).Cells(j, 2).Interior.ColorIndex = 8
    'Sheets(nomeAba).Select
    'ActiveSheet.Range("B" & j & ":R" & j).Select
    'Selection.Copy
    'Sheets(NOME2).Select
    'linha2 = 2
    'While Sheets(NOME2).Range("B" & linha2).Value <> ""
   
   
    'linha2 = linha2 + 1
   
   
    'Wend
   
    'ActiveSheet.Range("B" & linha2).Select
   ' ActiveCell.Interior.ColorIndex = 8
   ' ActiveSheet.Paste

End If

Next j


'Application.CutCopyMode = False
'Planilha1.Select
'Planilha1.Range("A1").Select


End Sub

Código: Selecionar todos
Sub teste2()
Dim linha As Long
Dim nomeAba As String
nomeAba = "Plan1"
linha = 1
Sheets(nomeAba).Range("B" & linha).Interior.ColorIndex = 6

End Sub

Sub teste()
Dim nomeAba As String
nomeAba = "Plan1"
Dim linha As Long
linha = 1
If Sheets(nomeAba).Range("B" & linha).Interior.ColorIndex = 6 Then

MsgBox "Amarelo"
End If

End Sub
Você não está autorizado a ver ou baixar esse anexo.
É estudando que se consegue. Quando quiser agradecer, clique no joinha. Marque como resolvido na parte que resolveu sua dúvida.
klarc28
Membro
Membro
 
Mensagens: 1410
Registrado em: Sáb Dez 09, 2017 12:33 am
Has thanked: 35 times
Have thanks: 588 times

Re: Retornar cor da célula!

Mensagempor EdsonBR » Sex Fev 21, 2020 9:52 am

Ander39 escreveu:...eu uso formatação condicional..., dai eu coloco pra pintar de amarelho... Estou tentando criar uma macro para separar esses dados que estão pintados em amarelho, mas a macro me retorna uma cor que simplesmente não existe, retorna o valor : -4142 Já usei rertorno como RGB, decimal e por ai vai ...
...Porem se eu usar as cores acima pra pintar uma unica célula ela fica igual as celulas que eu não consigo pegar a cor.
...Quando eu pinto uma celula usando a palheta de cores do menu inicial do excel retorna a cor correta.

Bom dia, colegas!

Pra retornar a cor alterada de células sujeitadas à formatação condicional tem que usar a propriedade DisplayFormat do objeto Range. Então, ao invés de usar:
If ActiveSheet.Cells(1, 3).Interior.Color = ...

Teria que usar:
If ActiveSheet.Cells(1, 3).DisplayFormat.Interior.Color = ...

Ou testar via macro se a condição da fórmula da formatação condicional foi atendida para aquele range.

A triste notícia é que a propriedade .DisplayFormat não funciona (e não se sabe o porquê) em Functions (UDF's), só em Sub's.
Imagem
Avatar do usuário
EdsonBR
Membro
Membro
 
Mensagens: 676
Registrado em: Qui Nov 05, 2015 11:43 pm
Localização: Joinville, SC
Has thanked: 147 times
Have thanks: 442 times


Voltar para VBA & Macros

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes