DUVIDAS COM MASKEDBOX
Olá galera do VBMania!
Estou desenvolvendo um projeto, e estou tendo problemas com máscaras de entrada, e acredito que vocês possam me ajudar.
1. Tenho uma MaskEdBox e um Combo Box com dois itens CPF e CNPJ, quando o usuário selecionar CPF a mascara fica sendo ___.___.___-__ e quando ele muda para CNPJ __.___.___/____-__ . Porém quando eu seleciono por exemplo CPF e depois quiser mudar para CNPJ a mascara não fica correta, fica ainda alguns resisduos da mascara do CNPJ. Acredito que o correto seria limpar a MaskEdBox e fazer uma nova mascara via codigo, mas não sei como fazer isso, já olhei no Google mas toda vez que eu tentava dava a mesma coisa.
2. O outro é quase a mesma coisa, mas acho que já mais tratamento de string. Tipo, eu tenho uma text box que deve receber um valor monetario, sendo que eu queria que a medida que o usuario digitasse o valor fosse sendo preenchido da direita para a esquerda acrescentado os pontos e virgulas automaticamente.
Vou ressaltar que já fiz pesquisas para ver se encontrava algo, mas não consegui, por isso estou recorrendo a vocês. Abraço a todos!!!!
Estou desenvolvendo um projeto, e estou tendo problemas com máscaras de entrada, e acredito que vocês possam me ajudar.
1. Tenho uma MaskEdBox e um Combo Box com dois itens CPF e CNPJ, quando o usuário selecionar CPF a mascara fica sendo ___.___.___-__ e quando ele muda para CNPJ __.___.___/____-__ . Porém quando eu seleciono por exemplo CPF e depois quiser mudar para CNPJ a mascara não fica correta, fica ainda alguns resisduos da mascara do CNPJ. Acredito que o correto seria limpar a MaskEdBox e fazer uma nova mascara via codigo, mas não sei como fazer isso, já olhei no Google mas toda vez que eu tentava dava a mesma coisa.
2. O outro é quase a mesma coisa, mas acho que já mais tratamento de string. Tipo, eu tenho uma text box que deve receber um valor monetario, sendo que eu queria que a medida que o usuario digitasse o valor fosse sendo preenchido da direita para a esquerda acrescentado os pontos e virgulas automaticamente.
Vou ressaltar que já fiz pesquisas para ver se encontrava algo, mas não consegui, por isso estou recorrendo a vocês. Abraço a todos!!!!
Fiz uma adaptação na função aqui, acho que serve pra vc
Public Function Retornar_Conteudo_Mascara(Conteudo As String)
Dim i As Integer
Dim X As Integer
Dim strMascara As String
Dim strRetorno As String
On Error GoTo lblErr
[ô]REMOVE OS DADOS DO CONTEUDO QUE NÃO SERÃO Usados na mascara
Conteudo = Replace(Conteudo, [Ô]([Ô], [Ô][Ô])
Conteudo = Replace(Conteudo, [Ô])[Ô], [Ô][Ô])
Conteudo = Replace(Conteudo, [Ô]-[Ô], [Ô][Ô])
Conteudo = Replace(Conteudo, [Ô]_[Ô], [Ô][Ô])
Conteudo = Replace(Conteudo, [Ô]/[Ô], [Ô][Ô])
Conteudo = Replace(Conteudo, [Ô]\[Ô], [Ô][Ô])
Conteudo = Replace(Conteudo, [Ô].[Ô], [Ô][Ô])
Conteudo = Replace(Conteudo, [Ô]:[Ô], [Ô][Ô])
Conteudo = Replace(Conteudo, [Ô] [Ô], [Ô][Ô])
[ô]Seleciona mascara informada no parametro
strMascara = [Ô]##.###.###/####-##[Ô]
[ô]SE FOR VAZIO ZERA A MASCARA PARA USAR NO CONTROLE MASKEDBOX
If Trim(Conteudo) = [Ô][Ô] Then
strMascara = Replace(strMascara, [Ô]#[Ô], [Ô]_[Ô])
[ô]CASO A MASCARA SEJA COM 9 AO INVéS DE #
strMascara = Replace(strMascara, [Ô]9[Ô], [Ô]_[Ô])
Retornar_Conteudo_Mascara = strMascara
GoTo lblEnd
End If
[ô]COLOCA ZEROS NO LOCAL DO # OU NOVE PARA SER USADO NA FUNÇÃO FORMAT
strMascara = Replace(strMascara, [Ô]#[Ô], [Ô]0[Ô])
[ô]CASO A MASCARA SEJA COM 9 AO INVéS DE #
strMascara = Replace(strMascara, [Ô]9[Ô], [Ô]0[Ô])
[ô]antiga forma
[ô]Retornar_Conteudo_Mascara = Format(Conteudo, strMascara)
X = 1
For i = 1 To Len(strMascara)
If Len(Conteudo) >= X Then
If Mid(strMascara, i, 1) = [Ô]0[Ô] Then
strRetorno = strRetorno & Mid(Conteudo, X, 1)
X = X + 1
Else
strRetorno = strRetorno & Mid(strMascara, i, 1)
[ô]x = x - 1
End If
Else
strRetorno = strRetorno & Mid(strMascara, i, 1)
End If
Next i
X = 0
[ô]nova forma
Retornar_Conteudo_Mascara = strRetorno
On Error GoTo lblErr
GoTo lblEnd
lblErr:
Err.Clear
Resume lblEnd
lblEnd:
End Function
Public Function Retornar_Conteudo_Mascara(Conteudo As String)
Dim i As Integer
Dim X As Integer
Dim strMascara As String
Dim strRetorno As String
On Error GoTo lblErr
[ô]REMOVE OS DADOS DO CONTEUDO QUE NÃO SERÃO Usados na mascara
Conteudo = Replace(Conteudo, [Ô]([Ô], [Ô][Ô])
Conteudo = Replace(Conteudo, [Ô])[Ô], [Ô][Ô])
Conteudo = Replace(Conteudo, [Ô]-[Ô], [Ô][Ô])
Conteudo = Replace(Conteudo, [Ô]_[Ô], [Ô][Ô])
Conteudo = Replace(Conteudo, [Ô]/[Ô], [Ô][Ô])
Conteudo = Replace(Conteudo, [Ô]\[Ô], [Ô][Ô])
Conteudo = Replace(Conteudo, [Ô].[Ô], [Ô][Ô])
Conteudo = Replace(Conteudo, [Ô]:[Ô], [Ô][Ô])
Conteudo = Replace(Conteudo, [Ô] [Ô], [Ô][Ô])
[ô]Seleciona mascara informada no parametro
strMascara = [Ô]##.###.###/####-##[Ô]
[ô]SE FOR VAZIO ZERA A MASCARA PARA USAR NO CONTROLE MASKEDBOX
If Trim(Conteudo) = [Ô][Ô] Then
strMascara = Replace(strMascara, [Ô]#[Ô], [Ô]_[Ô])
[ô]CASO A MASCARA SEJA COM 9 AO INVéS DE #
strMascara = Replace(strMascara, [Ô]9[Ô], [Ô]_[Ô])
Retornar_Conteudo_Mascara = strMascara
GoTo lblEnd
End If
[ô]COLOCA ZEROS NO LOCAL DO # OU NOVE PARA SER USADO NA FUNÇÃO FORMAT
strMascara = Replace(strMascara, [Ô]#[Ô], [Ô]0[Ô])
[ô]CASO A MASCARA SEJA COM 9 AO INVéS DE #
strMascara = Replace(strMascara, [Ô]9[Ô], [Ô]0[Ô])
[ô]antiga forma
[ô]Retornar_Conteudo_Mascara = Format(Conteudo, strMascara)
X = 1
For i = 1 To Len(strMascara)
If Len(Conteudo) >= X Then
If Mid(strMascara, i, 1) = [Ô]0[Ô] Then
strRetorno = strRetorno & Mid(Conteudo, X, 1)
X = X + 1
Else
strRetorno = strRetorno & Mid(strMascara, i, 1)
[ô]x = x - 1
End If
Else
strRetorno = strRetorno & Mid(strMascara, i, 1)
End If
Next i
X = 0
[ô]nova forma
Retornar_Conteudo_Mascara = strRetorno
On Error GoTo lblErr
GoTo lblEnd
lblErr:
Err.Clear
Resume lblEnd
lblEnd:
End Function
Para o primeiro item você pode fazer assim:
CPF:
msbCNPJ.Mask = [Ô][Ô]
msbCNPJ.Text = [Ô][Ô]
msbCNPJ.Mask = [Ô]###.###.###-##[Ô]
CNPJ:
msbCNPJ.Mask = [Ô][Ô]
msbCNPJ.Text = [Ô][Ô]
msbCNPJ.Mask = [Ô]###.###.###/####-##[Ô]
CPF:
msbCNPJ.Mask = [Ô][Ô]
msbCNPJ.Text = [Ô][Ô]
msbCNPJ.Mask = [Ô]###.###.###-##[Ô]
CNPJ:
msbCNPJ.Mask = [Ô][Ô]
msbCNPJ.Text = [Ô][Ô]
msbCNPJ.Mask = [Ô]###.###.###/####-##[Ô]
Bom meu caro..vamos por parte..
Primeiro a mudança de CPF para CNPJ
If CboTipoPessoa.Text = [Ô]FÃsica[Ô]
msbCNPJ.Mask = [Ô][Ô]
msbCNPJ.Text = [Ô][Ô]
msbCNPJ.Mask = [Ô]###.###.###-##[Ô]
else
msbCNPJ.Mask = [Ô][Ô]
msbCNPJ.Text = [Ô][Ô]
msbCNPJ.Mask = [Ô]###.###.###/####-##[Ô]
endif
Aproveitando o código do nosso amigo HUGO (chupin mesmo ehua heuhaue h)
Agora o código pra vc colocar no evento Change do text box que vc quer q aceite o valor monetário lá
Dim intParou As Integer
Dim intTamanho As Integer
With TxtValor [ô]coloque o nome do text box aki
intParou = .SelStart
intTamanho = Len(Trim(.Text))
.Text = Formata_Valor(.Text)
.SelLength = 0
.SelStart = IIf((intParou + (Len(Trim(.Text)) - intTamanho)) > 0, (intParou + (Len(Trim(.Text)) - intTamanho)), 0)
End With
Espero que tenha entendido
abraços e boa sorte
Primeiramente gostaria de agradecer a ajudar de vocês. Porem, estou com uma duvida na seguinte linha
.Text = Formata_Valor(.Text)
. Eu n entendi o Formata_Valor.
Pelo que entendi
Formata_Valor seria o nome da função/sub que contem os código
If CboTipoPessoa.Text = [Ô]FÃsica[Ô]
msbCNPJ.Mask = [Ô][Ô]
msbCNPJ.Text = [Ô][Ô]
msbCNPJ.Mask = [Ô]###.###.###-##[Ô]
else
msbCNPJ.Mask = [Ô][Ô]
msbCNPJ.Text = [Ô][Ô]
msbCNPJ.Mask = [Ô]###.###.###/####-##[Ô]
endif
ou seja
Private sub Formata_valor (CboTipoPessoa as textBox)
If CboTipoPessoa.Text = [Ô]FÃsica[Ô]
msbCNPJ.Mask = [Ô][Ô]
msbCNPJ.Text = [Ô][Ô]
msbCNPJ.Mask = [Ô]###.###.###-##[Ô]
else
msbCNPJ.Mask = [Ô][Ô]
msbCNPJ.Text = [Ô][Ô]
msbCNPJ.Mask = [Ô]###.###.###/####-##[Ô]
endif
end sub
Formata_Valor seria o nome da função/sub que contem os código
If CboTipoPessoa.Text = [Ô]FÃsica[Ô]
msbCNPJ.Mask = [Ô][Ô]
msbCNPJ.Text = [Ô][Ô]
msbCNPJ.Mask = [Ô]###.###.###-##[Ô]
else
msbCNPJ.Mask = [Ô][Ô]
msbCNPJ.Text = [Ô][Ô]
msbCNPJ.Mask = [Ô]###.###.###/####-##[Ô]
endif
ou seja
Private sub Formata_valor (CboTipoPessoa as textBox)
If CboTipoPessoa.Text = [Ô]FÃsica[Ô]
msbCNPJ.Mask = [Ô][Ô]
msbCNPJ.Text = [Ô][Ô]
msbCNPJ.Mask = [Ô]###.###.###-##[Ô]
else
msbCNPJ.Mask = [Ô][Ô]
msbCNPJ.Text = [Ô][Ô]
msbCNPJ.Mask = [Ô]###.###.###/####-##[Ô]
endif
end sub
JOSIMARCSILVA, boa noite.
Correto, exceto em uma coisa:
Este trecho você colocou assim:
O Correto é assim:
E não esqueça do THEN no final da instução IF, ok??
E para chamar é fácil, no evento click do combobox?
OK???
Correto, exceto em uma coisa:
Este trecho você colocou assim:
Private sub Formata_valor (CboTipoPessoa as [txt-color=#e80000]textBox[/txt-color])
O Correto é assim:
Private Sub Formata_valor(CboTipoPessoa As [txt-color=#0000f0]ComboBox[/txt-color])
E não esqueça do THEN no final da instução IF, ok??
E para chamar é fácil, no evento click do combobox?
Private Sub CboTipoPessoa_Click()
Call Formata_valor(CboTipoPessoa)
End Sub
OK???
Pessoal a parte que eu disse q não tinha entendido era em relação a esse code
Entenderam????
Citação:
Agora o código pra vc colocar no evento Change do text box que vc quer q aceite o valor monetário lá
Dim intParou As Integer
Dim intTamanho As Integer
With TxtValor [ô]coloque o nome do text box aki
intParou = .SelStart
intTamanho = Len(Trim(.Text))
.Text = Formata_Valor(.Text)
.SelLength = 0
.SelStart = IIf((intParou + (Len(Trim(.Text)) - intTamanho)) > 0, (intParou + (Len(Trim(.Text)) - intTamanho)), 0)
End With
Entenderam????
Cara, eu não uso msk para formatação.
Vê se o projeto anexo te ajuda.
Nele CIC e CNPJ são interpretados diretamente na digitação sem os caracteres formatadores dos dados (pontos e traços)
Se tem 11 digitos é CIC
Se tem 14digitos é CPJ
. . .
Tópico encerrado , respostas não são mais permitidas