Logo Hardware.com.br
1003FCARLOS
1003FCARLOS Zerinho Registrado
5 Mensagens 0 Curtidas

[Resolvido] Formatar número negativo em vermelho em um textbox - via código vba

#1 Por 1003FCARLOS 23/08/2020 - 16:13
Boa tarde a todos,
Gostaria de uma ajuda para uma dificuldade que não consegui superar: estou alimentando várias TEXTBOX's com valores variáveis originários de um banco de dados existente numa tabela;
Preciso que as TEXTBOX's apresentem esses números, caso negativos, com o sinal negativo e em VERMELHO.
Como fazer isso via código?
Obrigado
LaerteB
LaerteB Super Participante Registrado
153 Mensagens 127 Curtidas
#2 Por LaerteB
23/08/2020 - 23:54
Boa noite, 1003FCARLOS

Como tinha dito na MP para ti, é necessário anexar um arquivo exemplo, veja o Texto abaixo:

"Como todos aqui, temos compromissos e não temos muito tempo para criar um arquivo do zero, pois
ajudamos somente no nosso tempo livre... é muito importante você anexar uma planilha de
exemplo com dados (fictícios) e que não seja o projeto inteiro ; explicando com as informações
necessárias para alcançar o seu objetivo, desta forma poderemos ajudá-lo com maior rapidez e
eficácia (a maioria nem olharia este Tópico sem um arquivo exemplo, pois existe muitas
"variáveis" que podem impossibilitar o sucesso parcial ou total da solução proposta,se não tiver um
arquivo exemplo que for disponibilizado) "...

Mas estou disponibilizando um código que poderá te servir (estou informando no "chutômetro" , por
não haver um arquivo exemplo disponível), veja abaixo:
Private Sub TextBox1_Change()

If IsNumeric(TextBox1.Text) Then
If TextBox1.Text < "0" Then
UserForm1.TextBox1.BackColor = &H80000005
UserForm1.TextBox1.Font = Bold
UserForm1.TextBox1.ForeColor = &HFF&

ElseIf TextBox1.Text > "0" Then
UserForm1.TextBox1.BackColor = &H80000005
UserForm1.TextBox1.Font = Bold
UserForm1.TextBox1.ForeColor = &HC00000

End If
End If


Verifique se era o que queria, mas caso precise de mais ajuda, por gentileza anexar um arquivo exemplo boa.gif..

Aguardando sua resposta e seu Feed Back ... se foi útil, não esqueça de Clicar no Botão "Curtir"... bom_trabalho.gif

LaerteBsmile.png
"Se a resposta foi útil para ti wink.png, por gentileza clicar no botão Curtir, obrigado wink.png ."
1003FCARLOS
1003FCARLOS Zerinho Registrado
5 Mensagens 0 Curtidas
#3 Por 1003FCARLOS
24/08/2020 - 21:18
LaerteB disse:


Obrigado Laerte,

Dessa maneira, eu já tinha feito.
Na verdade tenho aproximadamente 30 Textbox's no meu Userform.
Elas são abastecidas com valores de uma tabela com linha definida e coluna variável.
No abastecimento das TextBox's utilizo a função format, para formatar em R$, conforme abaixo:
TextBox1 = Format(Planilha1.Cells(7, COL).Value, "R$ #,##0;(R$ #,##0)"). - sendo COL a variável que define a coluna
Assim, imaginei que existisse, na função Format, algum recurso que, além de apresentar o negativo entre parênteses, mostrasse tb o valor em vermelho.

Cabe destacar que numa gravação manual de macro, é apresentada uma função NUMBERFORMAT que faz esse ajuste.
Exemplo: Selection.NumberFormat = "$#,##0_);[Red]($#,##0)"

Como posso associar esse NUMBERFORMAT ao FORMAT que citei acima??

É disso que preciso.

Obg
LaerteB
LaerteB Super Participante Registrado
153 Mensagens 127 Curtidas
#4 Por LaerteB
25/08/2020 - 00:50
Boa noite, 1003FCARLOS

Primeiro por gentileza não esqueça de colocar "sempre" o seu arquivo exemplo (como
informado no post #2) wink.png..

Agora como tu tens muitos TextBox e precisa de uma forma de otimizar, cole o código
abaixo, no botão que "abastece" os mesmos:
Dim objt As Control

For Each objt In Me.Controls

If TypeName(objt) = "TextBox" Then
objt.Text = Format(objt, "Currency&quot

End If

If TypeName(objt) = "TextBox" Then
If objt.Text < "0" Then
objt.ForeColor = &HFF&

End If
End If

Next objt


Com esse código ele fará com que todos os TextBox do seu formulário tenham o
Formato "Moeda" (R$ #,##.00) e se o valor for "negativo" ficará em vermelho como
queria... desta forma as linhas com o "Format" que tu tinha colocado pode ser
retiradas (deixando somente este código acima citado, que fará isto para ti), alterando
as linhas como abaixo:
TextBox1 = Planilha1.Cells(7, COL).Value


OBS: não se esqueça de excluir o código dentro do procedimento(abaixo), que eu tinha informado
no post #2:

Private Sub TextBox1_Change()


Espero que seja isto que queria, e caso precise de mais ajuda por gentileza anexar um arquivo exemplo boa.gif..

Aguardando sua resposta e seu Feed Back ... e não esqueça de Clicar no Botão "Curtir"... bom_trabalho.gif

LaerteBsmile.png
"Se a resposta foi útil para ti wink.png, por gentileza clicar no botão Curtir, obrigado wink.png ."
LaerteB
LaerteB Super Participante Registrado
153 Mensagens 127 Curtidas
#6 Por LaerteB
26/08/2020 - 00:24
Boa noite, 1003FCARLOS

Cadê o anexo?? por gentileza colocar o anexo que informou no seu post #5...

Em relação a ser confidencial, eu tinha explicado no post #2 que era para tu enviar "...
uma planilha de exemplo com dados (fictícios) e que não seja o projeto inteiro..." bom_trabalho.gif.

Então sem o arquivo exemplo não tenho como verificar do "porque" não está reconhecendo
o valor das TextBox, pois o código que informei no post #4 está funcionando corretamente
aqui... verifique se tu tirou somente a função "Format" das linhas dos TextBox, como mencionei no
post #4.

Aguardando sua resposta, seu arquivo exemplo e seu Feed Back ... e não esqueça de Clicar no Botão "Curtir"... bom_trabalho.gif

LaerteBsmile.png
"Se a resposta foi útil para ti wink.png, por gentileza clicar no botão Curtir, obrigado wink.png ."
1003FCARLOS
1003FCARLOS Zerinho Registrado
5 Mensagens 0 Curtidas
#7 Por 1003FCARLOS
26/08/2020 - 18:53
LaerteB disse:


Boa noite Laerte,
Ontem fiz Upload do arquivo.

Tem algum macete ou basta fazer o upload e depois clicar em responder???
Vou fazer novamente

Amigo,
Consegui o que queria.
Incluí o carregamento dos valores com o Format, dentro do segundo IF do código que vc mandou e deu certo.
Ou seja, primeiro vc tem que carregar o Textbox pra depois ele analisar a condição de ser ou não maior que zero.
Precisei tb limpar o vermelho no início do primeiro IF, senão sempre que um label ficar vermelho, na próxima consulta ele fica vermelho de novo independent se for positivo ou negativo.
Veja como ficou o código:

Function Carrega_Valores()
Dim Obj As Control

For Each Obj In Me.Controls

If TypeName(Obj) = "TextBox" Then

Obj.ForeColor = &H80000012

TextBox1 = Format(Planilha1.Cells(2, COL).Value, "R$ #,##0;-R$ #,##0&quot
TextBox2 = Format(Planilha1.Cells(3, COL).Value, "R$ #,##0;-R$ #,##0&quot
TextBox3 = Format(Planilha1.Cells(4, COL).Value, "R$ #,##0;-R$ #,##0&quot
TextBox4 = Format(Planilha1.Cells(5, COL).Value, "R$ #,##0;-R$ #,##0&quot
TextBox5 = Format(Planilha1.Cells(6, COL).Value, "R$ #,##0;-R$ #,##0&quot
TextBox6 = Format(Planilha1.Cells(7, COL).Value, "R$ #,##0;-R$ #,##0&quot

If Obj.Text < "0" Then

Obj.ForeColor = &HFF&

End If

End If

Next
End Function


Obrigado. Sua ajuda foi fundamental.
Abs

Anexos

LaerteB
LaerteB Super Participante Registrado
153 Mensagens 127 Curtidas
#8 Por LaerteB
27/08/2020 - 00:11
Boa noite, 1003FCARLOS

Fiquei feliz que conseguiu fazer de outra maneira e ficou como queria boa.gif...

Você pode também fazer o que te enviei anteriormente que funcionará, só
acrescentei a sua linha que limpa o ForeColor "vermelho" (tinha esquecido deste
detalhe oops.png)...

Estou passando o código abaixo, que também realiza o que quer, observe que
tirei os "Format" que tinha citado nos post #4 e #6, verifique:
Function Carrega_Valores()

TextBox1 = Planilha1.Cells(2, COL).Value
TextBox2 = Planilha1.Cells(3, COL).Value
TextBox3 = Planilha1.Cells(4, COL).Value
TextBox4 = Planilha1.Cells(5, COL).Value
TextBox5 = Planilha1.Cells(6, COL).Value
TextBox6 = Planilha1.Cells(7, COL).Value

Dim objt As Control

For Each objt In Me.Controls

If TypeName(objt) = "TextBox" Then
objt.Text = Format(objt, "Currency&quot

End If

If TypeName(objt) = "TextBox" Then
objt.ForeColor = &H3A3000
If objt.Text < "0" Then
objt.ForeColor = &HFF&

End If
End If

Next objt

End Function


Caso queira mudar o "Format" para o que você já usa, pode alterar para a linha abaixo,
que já está alterada com a sua mascara (tirei o "Currency" e coloquei a sua mascara):
    objt.Text = Format(objt, "R$ #,##0")


Observe que não é necessário colocar o sinal "-" neste trecho do código (já faz o que
quer) bom_trabalho.gif.

Agora vou te dar algumas dicas que tem a ver com as regras deste Fórum:

1º Somente clique no Botão "Citar" se realmente for necessário salientar a mensagem
anterior que tenha ligação com a sua resposta (insira até no máximo três linhas);
2º Para inserir o códigos é melhor clicar no "+" do menu acima da janela de resposta, que
abrirá outra janela e nela insira os códigos;
3º Quando verificar que todas as suas dúvidas foram sanadas, insira o prefixo
"Resolvido" antes do titulo, veja as imagens explicativas logo abaixo:

Anexo do post
Anexo do post

Qualquer coisa estamos aqui para ajudá-lo cadeado_alegrinho.gif
Aguardando sua resposta e seu Feed Back ... e não esqueça de Clicar no Botão "Curtir"... bom_trabalho.gif

LaerteBsmile.png

Anexos

"Se a resposta foi útil para ti wink.png, por gentileza clicar no botão Curtir, obrigado wink.png ."
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal