Vídeo recomendado
https://youtu.be/diWPPPhW-9E

format Currency em modulo de classe

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
fallex
Colaborador
Colaborador
Mensagens: 13
Registrado em: Ter Jul 28, 2020 12:23 pm

format Currency em modulo de classe

Mensagem por fallex »

Boa Tarde a todos.

Galera, eu preciso de mais uma ajuda, seguinte...

Eu tenho um módulo de classe que uso para formatar textbox....então eu tenho nesse módulo o seguinte código:

Private Sub ToCurrency_Change()

Dim i As Integer, T As String
If Not IsNumeric(ToCurrency.Text) Then ToCurrency.Text = Empty
With ToCurrency
T = .Text
i = Len(T) - .SelStart
T = Replace(.Text, ",", "")
If Len(T) < 3 Then T = String(3 - Len(T), "0") & T
T = Mid(T, 1, Len(T) - 2) & "," & Mid(T, Len(T) - 1)
T = Format(T, "R$#,##0.00")
If .Text <> T Then .Text = T
.SelStart = Len(T) - i
End With

Nesse código, a textbox fica formatada com R$0,00 tudo certinho....ao digitar ela já coloca os pontos e virgulas....tudo ok.....porémmmmm.....quando eu preciso fazer calculos com essa textbox não da certo, pois, em muitos casos ela transforma o valor de, por exemplo R$1,20 em R$0,12....imagino que isso acontece porque exatamente o código funciona no evento change.

Sendo assim, eu preciso tirar a textbox deste modulo, e fazer a formatação dentro do form, usando textbox=format(textbox,"currency").

A pergunta é....como é possivel criar a formatação desta textbox....sendo textbox=format(textbox,"currency"), em um módulo de classe e desta forma conseguir fazer calculos com essa textbox, sem o erro acima.

Já tentei mudar o código, diversas vezes....porém....tem algo que eu não me liguei e que não está funcionando.....

obrigado.


PS: aproveitando pra dizer que, o motivo de eu colocar essa formatação em módulos de classe, facilitaria no trabalho com forms....eu já tenho no modulo de classe, formatação para cep, cpf, cnpj e etc....o que é uma mão na roda pra "gerenciar" diversos forms.....se tiver jeito de colocar o format Currency, bastaria somente puxar essa formatação para o form.

Não sei se fui claro...mas....


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Raygsson
Manda bem
Manda bem
Mensagens: 118
Registrado em: Sex Jan 31, 2020 8:06 pm

Re: format Currency em modulo de classe

Mensagem por Raygsson »

Segue formatação simples detectando quando o usuario tecla Tab

Código: Selecionar todos

Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyTab Then
         TextBox1.Text = Format(TextBox1.Text, "Currency")
    End If
End Sub


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: format Currency em modulo de classe

Mensagem por Reinaldo »

Well, uma caixa de texto ou TextBox, por padrão/default e como o nome/descrição sugere, considera seus dados/valores como uma string/texto; mesmo formatando,na inclusão seu conteúdo como numérico/currency, esse conteúdo ao ser "devolvido"/lido é tido como um texto/string.
Se a formatação via seu modulo de classe é satisfatória, o ideal/recomendado e "trabalhar" esse como dado no momento de sua utilização em calculo ou mesmo "salvar" na planilha.
O VBA considera em seus processamentos internos o padrão americano, ou seja para data utiliza como padrão/default o formato mm/dd/yyyy e numeros o separador de decimal como sendo o ponto "." e separador de milhar como sendo vírgula ",".
Em sua introdução/explanação, não está claro (pelo menos não entendi) onde reside o problema/demanda
"...ao digitar ela já coloca os pontos e virgulas....tudo ok..." vs "...quando eu preciso fazer calculos com essa textbox não da certo..."
Vou supor que:
a Formatação no evento change ("ToCurrency_Change()") do exemplo acima, esteja atendendo satifatóriamente; e que o calculo deva ocorrer no evento exit desse controle ("ToCurrency_Exit()")
Nesse evento, ou no momento do calculo, uma possibilidade e efetuar a "conversão" do conteúdo existente, para um dado numérico reconhecido pelo VBA.
Algo +/- assim
Dim dblToCurrency As Double
dblToCurrency=cdbl(vba.right(ToCurrency.Text,vba.len(ToCurrency-2))


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder