Tópicos relacionados a códigos VBA, gravação de macros, etc.
Por Sullivan2021
#68632
Boa noite pessoal, tudo bem com vocês? Me surgiu uma dúvida aqui referente ao VBA e mudança de cores nas células. Vou tentar explicar com um exemplo genérico a minha dúvida. Eu criei esse quadro abaixo, que possui um botão para pintar as células abaixo e uma imagem de engrenagem, que eu transformei num userform:


Imagem


Quando clicar naquela engrenagem, irá aparecer esse userform:


Imagem


Ao clicar nos botões de cores, eles irão apenas mudar o valor da célula A1. Veja no esquema abaixo:


Imagem


Ou seja, os botões das cores no userform irão mudar o valor da célula A1 para 1 ou 2 ou 3.
Prosseguindo, no “Botão que pinta as células abaixo” eu coloquei a seguinte fórmula:



Imagem


O IF funcionou perfeitamente, o problema é o conteúdo que está dentro das macros Cor_01, Cor_02 e Cor_03.
Digamos que eu cliquei na primeira cor (aquele verde água) e então o valor da célula A1 será 1.
Quando eu clico no “Botão que pinta as células abaixo” acontece o seguinte erro:



Imagem


O erro está contido na linha da cor, ou seja, em Color =
Eu usei essa fórmula acima para a Cor_01, Cor_02 e Cor_03 justamente pq se eu colocasse ela sem o If e somente para uma cor, ela funciona normalmente:


Imagem



Porém, eu quero usar uma condição If no “Botão que pinta as células abaixo” para diferenciar as três cores do userform, então eu mantive o With Range (“D8,D10,D12,F12,F10,F8”).Interior e nas macros que o If ativa eu copiei somente oq está abaixo do With Range e mudei apenas o código da cor para que corresponda com a cor que está no userform... e não está dando certo. Será que vocês podem me ajudar com isso?
Qualquer dúvida a respeito da explicação, eu respondo por aqui. Obrigado pela atenção!!



PS. Eu preciso necessariamente criar a fórmula no "Botão que pinta as células abaixo" no formato:

With Range (“D8,D10,D12,F12,F10,F8”).Interior
If [A1] = "1" Then
Cor_01
ElseIf [A1] = "2" Then
Cor_02
ElseIf [A1] = "3" Then
Cor_03

End If

End With

End Sub
#68634
Olá, @Sullivan2021 .

Segue uma alternativa. Veja se aproveita.
Código: Selecionar todos
Private Sub OptionButton1_Click()
 Range("D8,D10,D12,F8,F10,F12").Interior.Color = vbGreen
End Sub

Private Sub OptionButton2_Click()
 Range("D8,D10,D12,F8,F10,F12").Interior.Color = vbBlue
End Sub

Private Sub OptionButton3_Click()
 Range("D8,D10,D12,F8,F10,F12").Interior.Color = vbYellow
End Sub
Sullivan2021 agradeceu por isso
#68646
@osvaldomp
Obrigado pela resposta Osvaldo, mas esse método não vai funcionar no meu projeto. Esse exemplo que eu postei é genérico, no meu projeto eu tenho mais de 100 "Botões que pinta as células abaixo" e um total de 20 cores personalizadas. Cada um dos botões estará pintando diferentes células, por isso eu pensei na fórmula If, pois eu apenas estaria inserindo a fórmula If na macro de cada um dos botões sem especificar onde eles devem pintar, até pq cada um dos botões já tem o código para onde deve pintar (marcado em vermelho no exemplo abaixo). Veja o exemplo:


Botão 1:

With Range (“D8,D10,D12,F12,F10,F8”).Interior
If [A1] = "1" Then
Cor_01
ElseIf [A1] = "2" Then
Cor_02
ElseIf [A1] = "3" Then
Cor_03
End If
End With
End Sub




Botão 2:

With Range (“T10,T8,T12,Z12,Z10,Z8”).Interior
If [A1] = "1" Then
Cor_01
ElseIf [A1] = "2" Then
Cor_02
ElseIf [A1] = "3" Then
Cor_03
End If
End With
End Sub



Botão 3:
... e assim vai indo



Ou seja, se eu conseguir fazer que o If troque a cor de acordo com o valor da célula A1 e clicando através dos diferentes "Botões que pintam as células abaixo" no meu projeto, eu consigo criar uma espécie de menu para trocar a cor das células através do userform. Por exemplo, digamos que o botão 78 seja:

With Range (“AAB10,AAB8,AAB12,XXY12,XXY10,XXY8”).Interior
End With
End Sub


Para eu fazer com que esse botão tenha as três cores que eu citei no primeiro exemplo desse post, bastaria eu adicionar logo abaixo na fórmula da macro dele:

If [A1] = "1" Then
Cor_01
ElseIf [A1] = "2" Then
Cor_02
ElseIf [A1] = "3" Then
Cor_03
End If
End With
End Sub


Assim, toda vez que eu mudasse a cor lá no userform, ele mudaria a cor das células que o botão 78 pinta, no momento que eu clicar para executar o botão 78. Isso também iria valer para qualquer outro botão que eu clicasse, pois todos eles terão a mesma condição If que o botão 78.
Todos os botões teriam essa fórmula então:

If [A1] = "1" Then
Cor_01
ElseIf [A1] = "2" Then
Cor_02
ElseIf [A1] = "3" Then
Cor_03
End If
End With
End Sub


E o que seria diferente entre esses botões é a linha que seleciona as células para pintar (marcado em vermelho ali em cima), porém, preciso fazer que essas macros Cor_01, Cor_02 e Cor_03 funcionem para isso.

Ainda, eu personalizei 20 cores distintas para o meu projeto, na sua resposta vc colocou elas como
"Interior.Color = vbYellow", mas e no caso de uma cor personalizada? Como faria para adicionar? Repare que até no exemplo ali do meu primeiro post, as cores já estão com um código diferente, pois são personalizadas

Basicamente, o que eu estou querendo que o Excel execute é "para tal conjunto determinado de células, se a célula A1 estiver com tal valor, pintar essas células com tal cor quando for clicado nesse ou outro botão."

É possível usar o valor de uma c&eac[…]

Olá, @PRV111 . Sugestão: dispon[…]

Olá, @DenilsonPaim . Experimente subst[…]

=INDIRETO("A2")

Dida , Bom dia. Já que a sua necessidade […]

Como desativar essa função?

moduk1 , Bom dia. Na realidade não se tra[…]

Amigo, estou com problema similar, tenho excel 20[…]

@osvaldomp , Peço desculpas, meu site est[…]