Notifications
Clear all

Ler caracteres específicos de um texto

10 Posts
3 Usuários
0 Reactions
1,289 Visualizações
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Olá amigos do fórum, olha eu aqui novamente pedindo a ajuda dos nobres colegas.

Estou com um problema na divisão do texto de uma célula em várias textbox. Vou explicar abaixo para ficar mais fácil de vocês entenderem:

A informação na célula é essa: C.I.SEFAZ/DVGD/nº 001/2014

O Texto em azul é fixo, ou seja, tem sempre a mesma quantidade de caracteres.

Já o texto em vermelho, que representa a sigla de um setor, varia de acordo com o nome do setor. Por exemplo, DVGD tem 4 letras, mas SUPLAM tem 6, e assim por diante.
Para dividir a informação da célula nas minhas textbox eu uso a seguinte rotina:

txt_ci.Value = Left(.Cells(MatrizResultadosLinha(0), 1).Value, 4)
txt_ci_sefaz.Value = Mid(.Cells(MatrizResultadosLinha(0), 1).Value, 5, 5)
'txt_ci_lotacao.Value = ???????
txt_ci_n.Value = Mid(.Cells(MatrizResultadosLinha(0), 1).Value, 16, 2)
txt_ci_numero.Value = Mid(.Cells(MatrizResultadosLinha(0), 1).Value, 19, 3)
txt_ci_ano.Value = Right(.Cells(MatrizResultadosLinha(0), 1).Value, 4)

Como faço para tratar essa sigla da lotação levando em conta que a quantidade de caracteres não é fixa.

 
Postado : 31/03/2014 7:16 am
(@gtsalikis)
Posts: 2373
Noble Member
 

se os 2 azuis são fixos, é mto fácil:

Dim texto As String, comprimento_texto As Integer
Dim parte1 As String, parte2 As String, parte3 As String

texto = Range("A1")

'texto = "C.I.SEFAZ/DVGD/nº 001/2014" apenas para testar
comprimento_texto = Len(texto)

parte1 = Left(texto, 9)
texto = Right(texto, comprimento_texto - 10)
comprimento_texto = Len(texto)

parte3 = Right(texto, 11)
texto = Left(texto, comprimento_texto - 12)
comprimento_texto = Len(texto)

parte2 = texto

troque A1 pela tua célula

 
Postado : 31/03/2014 7:57 am
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Então amigo, são campos sempre fixos no sentido de terem sempre a mesma quantidade de caracteres, mas não quer dizer que são apenas 3 textbox.
No meu caso são 6

C.I.SEFAZ/DVGD/nº 001/2014

Textbox1 = C.I.
Textbox2 = SEFAZ
Textbox3 = DVGD (apenas este muda o tamanho de caracteres)
Textbox4= nº
Textbox5 = 001
Textbox6 = 2014

Obs.: As "/" não entram na conta pois são exibidas em forma de label.

 
Postado : 31/03/2014 8:26 am
(@gtsalikis)
Posts: 2373
Noble Member
 

basta segur a mesma lógica. eu usei 3 partes, vc pode usar 6...

 
Postado : 31/03/2014 8:27 am
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Eu vi que a sua lógica é funcional, porém não consegui entender. Por isso não consegui adaptar à partir do seu exemplo. Não estou pedindo nada mastigado, mas realmente não consegui desenrolar o código.

 
Postado : 31/03/2014 8:44 am
(@gtsalikis)
Posts: 2373
Noble Member
 

ok, bilokas, como vc ja estava mexendo com código, achei que vc conseguiria adaptar.

assim q voltar do almoçõ eu faço pra ti, com comentários no código pra vc entnder.

Abs

 
Postado : 31/03/2014 8:50 am
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

ok

 
Postado : 31/03/2014 8:52 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Uma outra possibilidade:

myVar = Split(.Cells(MatrizResultadosLinha(0), 1), "/")
Textbox1 = Left(myVar(0), 4) 'C.I.
Textbox2 = Right(myVar(0), 5) 'SEFAZ
Textbox3 = myVar(1) 'DVGD (apenas este muda o tamanho de caracteres)
Textbox4 = Left(myVar(2), 2) ' nº
Textbox5 = CInt(Right(myVar(2), 3)) '1
Textbox6 = myVar(3) '2014
 
Postado : 31/03/2014 8:58 am
(@gtsalikis)
Posts: 2373
Noble Member
 

O reinaldo já respondeu de uma forma bem mais simples que a minha, porém, como eu tinha promeitido:

Dim texto As String, comprimento_texto As Integer

texto = Range("A1")

'texto = "C.I.SEFAZ/DVGD/nº 001/2014" 'apenas para testar
comprimento_texto = Len(texto) 'pega o comprimento do texto

textbox1 = Left(texto, 4) 'pega os 4 caracteres da esquerda
texto = Right(texto, comprimento_texto - 4) 'atualiza o texto original na variável "texto", retirando o que já foi identificado acima
comprimento_texto = Len(texto) 'pega o comprimento do texto já reduzido

textbox2 = Left(texto, 5) 'pega os 5 caracteres da esquerda
texto = Right(texto, comprimento_texto - 6) 'atualiza o texto original na variável "texto", retirando o que já foi identificado acima e também a barra
comprimento_texto = Len(texto) 'pega o comprimento do texto já reduzido

textbox6 = Right(texto, 4) 'pega os 4 caracteres da direita
texto = Left(texto, comprimento_texto - 5) 'atualiza o texto original na variável "texto", retirando o que já foi identificado acima e também a barra
comprimento_texto = Len(texto) 'pega o comprimento do texto já reduzido

textbox5 = Right(texto, 3) 'pega os 3 caracteres da direita
texto = Left(texto, comprimento_texto - 4) 'atualiza o texto original na variável "texto", retirando o que já foi identificado acima e também a barra
comprimento_texto = Len(texto) 'pega o comprimento do texto já reduzido

textbox4 = Right(texto, 2) 'pega os 2 caracteres da direita
texto = Left(texto, comprimento_texto - 3) 'atualiza o texto original na variável "texto", retirando o que já foi identificado acima e também a barra
comprimento_texto = Len(texto) 'pega o comprimento do texto já reduzido

textbox3 = texto
 
Postado : 31/03/2014 10:15 am
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Gostaria de agradecer a ambos os amigos e dizer que depois da explicação, consegui entender a aplicação da solução proposta.

Ambas as soluções atenderam ao que eu precisava.

Jóinha para os dois!

 
Postado : 31/03/2014 12:58 pm