Notifications
Clear all

Mascara de moeda em uma quantidade de txtbox

6 Posts
3 Usuários
0 Reactions
1,384 Visualizações
AMORIM123
(@amorim123)
Posts: 77
Trusted Member
Topic starter
 

Olá galera,

No cód. abaixo cujos créditos são de Bruno sobral ( http://excelevba.com.br/formato-moeda-n ... to-digita/)
tenho uma rotina para que meus txtbox que receberem valores fiquem com aquela mascara de moeda conforme o usuário vá preenchendo o textbox; funciona muito bem e vem me sendo muito útil! Porém tenho um formulário com vários txtbox...para um form que tenho terei que abrir um "privete" para cada txtbox que desejo aplicar a rotina...dá muito trabalho! ..rsrssr, além do cód ficar muito extenso; gostaria de fazer uma alteração em que pudesse designar uma quantidade variável de txtbox aonde possa inserir ou tirar txtbox para receber essa configuração

Private Sub txt_faturamento_Change()

'créditos do código - Bruno Sobral (http://excelevba.com.br/formato-moeda-no-textbox-enquanto-digita/)

valor = txt_faturamento.Value
    If IsNumeric(valor) Then
        If InStr(1, valor, "-") >= 1 Then valor = Replace(valor, "-", "") 'retira sinal negativo
        If InStr(1, valor, ",") >= 1 Then valor = CDbl(Replace(valor, ",", "")) 'retirar a virgula
        If InStr(1, valor, ".") >= 1 Then valor = Replace(valor, ".", "") 'para trabalhar melhor retiramos ponto
        Select Case Len(valor) 'verifica casas para inserção de ponto
            Case 1
            numPonto = "00" & valor
            Case 2
            numPonto = "0" & valor
            Case 6 To 8
            numPonto = Left(valor, Len(valor) - 5) & "." & Right(valor, 5)
            Case 9 To 11
            numPonto = inseriPonto(8, valor)
            Case 12 To 14
            numPonto = inseriPonto(11, valor)
            Case Else
            numPonto = valor
        End Select
        numVirgula = Left(numPonto, Len(numPonto) - 2) & "," & Right(numPonto, 2)
        txt_faturamento.Value = numVirgula
    Else
        If valor = "" Then Exit Sub
        MsgBox "Número invalido", vbCritical, "Caracter Invalido"
        Exit Sub
    End If

End Sub



'----------------------------------------------------------------------------------


Function inseriPonto(inicio, valor)
    I = Left(valor, Len(valor) - inicio)
    M1 = Left(Right(valor, inicio), 3)
    M2 = Left(Right(valor, 8), 3)
    F = Right(valor, 5)
    If (M2 = M1) And (Len(valor) < 12) Then
    inseriPonto = I & "." & M1 & "." & F
    Else
    inseriPonto = I & "." & M1 & "." & M2 & "." & F
    End If
End Function

Abraços ...muito obrigado pelo tempo!

 
Postado : 17/05/2018 8:35 am
(@klarc28)
Posts: 971
Prominent Member
 

Mensagem removida pelo usuário

 
Postado : 17/05/2018 8:45 am
AMORIM123
(@amorim123)
Posts: 77
Trusted Member
Topic starter
 

'puts'...hahahah...mão na massa, por enquanto..rsrsrs!

tava tentando por select case..mas tá dando certo, não!

 
Postado : 17/05/2018 8:49 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

AMORIM123,

Boa tarde!

Há duas formas (que eu conheço) de fazer o que você quer. Uma é mais complexa pois utiliza módulos de classe. No arquivo Exemplo de Formatação de TextBox para Datas com uso de Classe e Propriedade TAG.zip anexo, você pode ver um exemplo.

A outra forma mais simples, todavia que utilizará sempre um Private Sub Nome_Da_CaixaDeTexto_Change para cada caixa de texto está no arquivo Máscara de Moeda Simultânea para várias Caixas de Texto.zip, também anexo. Essa segunda forma, apesar de exigir que você utilize sempre o evento change de cada objeto textbox, proporciona uma melhor utilização do código pois não há a necessidade de fazer um código grande para cada um dos textbox. Você faz uma chamada genérica ao mesmo bloco de código.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 17/05/2018 9:20 am
AMORIM123
(@amorim123)
Posts: 77
Trusted Member
Topic starter
 

Anexo

Solução boa...ela replica a rotina para todas txtbox do form, porém nem todos os txtbox devem receber esta rotina

 
Postado : 17/05/2018 11:19 am
(@klarc28)
Posts: 971
Prominent Member
 

Nas caixas de texto com valores de moeda, escreva na propriedade Tag a palavra Moeda.
Nas outras, deixe a propriedade Tag em branco.
Anexos.

 
Postado : 17/05/2018 11:23 am