Formatação Personal...
 
Notifications
Clear all

Formatação Personalizada

15 Posts
3 Usuários
0 Reactions
1,301 Visualizações
(@mprudencio)
Posts: 0
New Member
Topic starter
 

Tenho uma informação assim

123409090 e preciso apos a digitaçao em uma textbox que aplique essa formataçao

1234/09090

Tb preciso dessa formatação na celula mas nao foi

Tentei nas celulas:

0000/00000
####/#####
0000"/"00000
####"/"#####

Nenhuma das opções funcionaram.

 
Postado : 29/11/2016 11:14 am
(@edsonbr)
Posts: 0
New Member
 

Se não me engano tem q usar o caractere de escape "" antes da "/", pq este último é reservado p/ formatação de datas.

Format(123409090, "####/#####")

 
Postado : 29/11/2016 1:01 pm
(@mprudencio)
Posts: 0
New Member
Topic starter
 

Edson vlw a intenção mas nao funcionou coloquei no envento exit que esta o codigo

 
Postado : 29/11/2016 2:01 pm
(@mprudencio)
Posts: 0
New Member
Topic starter
 

Edson havia cometido um pequeno erro de digitação e na celula fucionou mas na textbox nao deu

A textbox e a mesma que digito a informação.

 
Postado : 29/11/2016 2:40 pm
(@edsonbr)
Posts: 0
New Member
 

Que estranho, Marcelo. Aqui funcionou. Usei assim:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   Me.TextBox1.Value = Format(Me.TextBox1.Value, "0000/00000")
End Sub
 
Postado : 29/11/2016 3:05 pm
(@mprudencio)
Posts: 0
New Member
Topic starter
 

Edson realmente vc tinha razão mas aconteceu um problema tanto para as celulas qto para o formulario.

So descobri o problema qdo fui cadastrar os outros iteNs

Veja todos os codigos no arquivo anexo.

 
Postado : 02/12/2016 8:20 am
(@edsonbr)
Posts: 0
New Member
 

Entendi o que vc quer fazer, Marcelo, em seu Userform. Na verdade vc deseja é uma máscara de entrada para os dados da Textbox, eu tava imaginando antes que seria formatar os dados na saída. É uma pena que o VBA não tem o MaskEdit Control (MSMASK32.OCX), disponível no VB desde antigamente, pois seria exatamente o que vc precisa. O Access também tem máscaras de entrada nativas. Caso vc tenha o VB instalado, crie uma referência ao "Microsoft MaskedEditBox Control 6.0 (SP3)". A sintaxe pode ver em https://msdn.microsoft.com/en-us/library/aa733654%28v=vs.60%29.aspx?f=255&MSPPError=-2147217396.

Outras sugestões, caso vc ainda assim queira fazer "na unha" usando a Textbox normal, seriam:
1) Programar os eventos KeyDown/etc da Textbox que a cada pressionamento formate e exiba a apresentação do resultado como desejado (usando o Format(Me..etc..));
2) Se vc deseja que a apresentação na Textbox seja exibida somente ao final, com o conteúdo inteiro já digitado, daria prá usar o evento Change da Textbox.
3) Vc poderia usar duas Textbox, uma para os dígitos inseridos do lado esquerdo (antes da barra) e outra para os do lado direito e uma Label fixa no meio, representando a barra. Aí, no código do CommandButton vc concatenaria o conteúdo das duas antes de enviar o resultado (somente algarismos) para a célula.

De qualquer maneira, quando se usa a função Format a barra inserida transforma o antes número numa String com o literal inserido. Então, antes de devolver para a célula teria que tratar de removê-la para que permaneçam apenas algarismos na célula, e para exibição na célula ou formata a coluna inteira com o formato personalizado 0000/00000 ou no trecho do seu código do Button usaria
Cells(i, 2).NumberFormat = "0000/00000".

Agora o ideal mesmo seria o MaskedEdit, simplificaria muito, pois os literais não ficam fazendo parte do conteúdo ao final.

 
Postado : 02/12/2016 10:37 am
(@edsonbr)
Posts: 0
New Member
(@brunoxro)
Posts: 0
New Member
 

Boa tarde MPrudencio,

Se bem entendi você que a barra apareça automaticamente no TextBox enquanto o usuário digita os valores.
Adaptei um código que tenho para fazer isso quando o usuário digita o número do celular.

No caso, o evento que uso é o KeyPress do TextBox. De uma olhada no código que está dentro do TextBox1 do arquivo em anexo.

att,

 
Postado : 02/12/2016 12:17 pm
(@mprudencio)
Posts: 0
New Member
Topic starter
 

Bruno é quase isso mas eu preciso que tambem na celula a / seja ignorada como caractere e seja apenas uma mascara.
Pois o codigo sera usado pra realizar uma busca e exibir uma imagem, entao ele nao pode ter a barra como dados na celula.

A mascara de entrada é necessaria tanto na textbox qto na celula.

Por exemplo se na celula selecionada tiver a informação 0009/00006 ao selecionar temos que ver na barra de formulas 000900006

 
Postado : 02/12/2016 12:43 pm
(@edsonbr)
Posts: 0
New Member
 

Então, Marcelo, aproveitando o código do Bruno e o que foi discutido anteriormente, veja se estamos no caminho.

 
Postado : 02/12/2016 1:34 pm
(@brunoxro)
Posts: 0
New Member
 

MPrudencio,

Acho que achei uma solução, mas acredito que o código que Edson acrescentou é uma solução mais prática.

De qualquer forma,

Coloquei um Replace nessa linha:

Cells(i, 2).Value = Replace(CStr(TextBox1), "/", "")

Na planilha selecione a coluna B -> Formatar Célula -> Personalizado -> Coloque 0000"/"00000
Depois vá em Validação de dados -> Número Inteiro -> Mínimo 0 e Máximo 999999999

Fiz isso alterando o que li nesse site: https://blog.npibrasil.com/como-criar-u ... -no-excel/

att,

 
Postado : 02/12/2016 1:52 pm
(@mprudencio)
Posts: 0
New Member
Topic starter
 

Edson Bruno ainda estamos esbarrando na trave, ja que os 0 a esquerda nao aparecem e isso da erro na hora da consulta

Eu ja estou pensando em alterar o formato achando que com a / nao vai funcionar.

 
Postado : 06/12/2016 6:46 am
(@brunoxro)
Posts: 0
New Member
 

Boa noite MPrudencio,

Já que você precisa dos zeros para a referência, uma alternativa que pensei e colocar uma coluna com a barra (/) para o usuário ver e uma outra com os zeros.
Não sei se seria uma alternativa viável. Em anexo coloquei um código que coloca uma coluna os valores, se necessário, com os zeros.

att,

 
Postado : 06/12/2016 8:14 pm
(@edsonbr)
Posts: 0
New Member
 

Marcelo, lembre-se também que vc pode usar a propriedade Text do objeto Range ou Cells, ao invés da propriedade Value. A vantagem é que Text traz o conteúdo da célula como está formatada. Então, supondo que sua célula em A2 contenha 0003/00007 mas como número com formato 0000/00000.
Nesse caso, o conteúdo é um número então conforme vc for usar a propriedade Value ou Text irá retornar:
Cells(2,1).Value retorna 300007 ("come" os zeros à esquerda)
Cells(2,1).Text retorna 0003/00007

E finalmente,
Replace(cells(2,1).text,"/","") retornará 000300007

 
Postado : 09/12/2016 9:37 pm