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....
Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
format Currency em modulo de classe
Re: format Currency em modulo de classe
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
- Reinaldo
- 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
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))
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))