DUVIDAS COM MASKEDBOX

FILIPEBSANTOS 05/02/2010 10:30:47
#333677
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!!!!
DEZ2 05/02/2010 10:54:49
#333680
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
HUGOSSOUZA 05/02/2010 11:00:02
#333681
Para o primeiro item você pode fazer assim:

CPF:
msbCNPJ.Mask = [Ô][Ô]
msbCNPJ.Text = [Ô][Ô]
msbCNPJ.Mask = [Ô]###.###.###-##[Ô]

CNPJ:
msbCNPJ.Mask = [Ô][Ô]
msbCNPJ.Text = [Ô][Ô]
msbCNPJ.Mask = [Ô]###.###.###/####-##[Ô]
SINKERTEC 05/02/2010 11:40:41
#333688
Resposta escolhida


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
FILIPEBSANTOS 23/02/2010 13:57:05
#335138
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.
JOSIMARCSILVA 23/02/2010 21:57:38
#335182
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
DANIKULL 24/02/2010 00:20:47
#335184
JOSIMARCSILVA, boa noite.

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???
FILIPEBSANTOS 24/02/2010 01:39:22
#335187
Pessoal a parte que eu disse q não tinha entendido era em relação a esse code
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????
MICROSCHEME 24/02/2010 09:19:50
#335195

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