PEGAR PRIMEIRA COLUNA LISTBOX

ADILSOO 27/02/2017 23:54:28
#471979
Boa noite pessoal!
Depois de tanto procurar, consegui meu combobox modificado com um textbox+listbox+command, bem, funcionou bem, com uma coluna, mas agora precisei adicionar colunas, e quando tento pegar os dados, ele pega os dados da linha inteira, mas eu precisava que pegasse somente a primeira coluna.
Alguém tem alguma ideia de como fazer? Preciso pegar a primeira coluna do listbox.

  Private Sub List1_ItemCheck(Item As Integer)
If List1.Selected(Item) Then
If Trim(Text2.Text) = [Ô][Ô] Then
Text2.Text = List1.List(Item)
Text2.Tag = List1.ItemData(Item)
Else
Text2.Text = Text2.Text & [Ô],[Ô] & List1.List(Item)
Text2.Tag = Text2.Tag & [Ô],[Ô] & List1.ItemData(Item)
End If
Else
If InStr(1, Text2.Text, List1.List(Item) & [Ô],[Ô], vbTextCompare) <> 0 Then
Text2.Text = Replace(Text2.Text, List1.List(Item) & [Ô],[Ô], [Ô][Ô])
Text2.Tag = Replace(Text2.Tag, List1.ItemData(Item) & [Ô],[Ô], [Ô][Ô])
Else
Text2.Text = Replace(Text2.Text, [Ô],[Ô] & List1.List(Item), [Ô][Ô])
Text2.Tag = Replace(Text2.Tag, [Ô],[Ô] & List1.ItemData(Item), [Ô][Ô])
End If
End If
End Sub


Esse é o código de estou usando...
DS2T 28/02/2017 09:03:10
#471982
Como os dados da sua coluna são limitadas por tamanhos fixos, basta você usar um Mid() para retornar somente o que você quer.
No seu caso, você precisaria de um Replace também para retirar os espaços em branco.

Abraços!
TUNUSAT 28/02/2017 10:20:15
#471984
ADILSOO,

Exatamente o que o DS2T disse, mas você pode fazer de duas formas a saber:

1 - Usando colunas fixas - Explicação: Pelo que eu vi, o tamanho das colunas é sempre o mesmo. Isso ajuda muito a desenvolver, mas na manutenção fica mais complicado...
2 - Usando um caractere separador de colunas. Explicação: Você pode usar um caractere estilo que já tem. Peguei esses dois: [Ô]Aspas simples ([ô])[Ô] e o [Ô]Elevado ao cubo (³)[Ô]

No código abaixo eu EXAGEREI, pois deixei a função com a possibilidade de escolha da coluna que se quer pegar (parece que você só quer a primeira).

 Option Explicit

Private Sub Form_Load()
List1.AddItem [Ô]144 - 56 M³ PERA RIO [Ô]
List1.AddItem [Ô]145 - 56 M³ SHARMUT [Ô]
List1.AddItem [Ô]147 - 56 M³ VALENCIA [Ô]
End Sub

Private Sub List1_ItemCheck(Item As Integer)

If List1.Selected(Item) Then

If Trim(Text2.Text) = [Ô][Ô] Then
Text2.Text = List1.List(Item)
Text2.Tag = List1.ItemData(Item)
Else
[ô]Text2.Text = Text2.Text & [Ô],[Ô] & List1.List(Item)
Text2.Text = Text2.Text & [Ô], [Ô] & PegaUmaColuna(List1.List(Item), 3)
Text2.Tag = Text2.Tag & [Ô],[Ô] & List1.ItemData(Item)
End If

Else

If InStr(1, Text2.Text, List1.List(Item) & [Ô],[Ô], vbTextCompare) <> 0 Then
Text2.Text = Replace(Text2.Text, List1.List(Item) & [Ô],[Ô], [Ô][Ô])
Text2.Tag = Replace(Text2.Tag, List1.ItemData(Item) & [Ô],[Ô], [Ô][Ô])
Else
Text2.Text = Replace(Text2.Text, [Ô],[Ô] & List1.List(Item), [Ô][Ô])
Text2.Tag = Replace(Text2.Tag, [Ô],[Ô] & List1.ItemData(Item), [Ô][Ô])
End If

End If

End Sub

Private Function PegaUmaColuna(txtLinha As String, bytColuna As Byte) As String
Dim strRetorno As String

Dim sColuna(0 To 2) As Byte
Dim sColunaTamanho(0 To 2) As Byte

Dim bytDiferenca As Byte
Dim sCaractere(1 To 2) As String
Dim sPosicao(1 To 2) As String

[ô]Posição
sColuna(0) = 1
sColuna(1) = 9
sColuna(2) = 15
[ô]Tamanho
sColunaTamanho(0) = 7
sColunaTamanho(1) = 6
sColunaTamanho(2) = 17

sCaractere(1) = [Ô]-[Ô]
sCaractere(2) = [Ô]³[Ô]

[ô]Pegar na forma [Ô]Colunada[Ô]
strRetorno = Trim(Mid(txtLinha, sColuna(bytColuna - 1), sColunaTamanho(bytColuna - 1)))

[ô]Pegar tendo algum caractere de referência
sPosicao(1) = InStr(txtLinha, sCaractere(1))
sPosicao(2) = InStr(txtLinha, sCaractere(2))
bytDiferenca = sPosicao(2) - sPosicao(1)

Select Case bytColuna

Case 1:
strRetorno = Trim(Left(txtLinha, sPosicao(bytColuna) - 1))
Case 2:
strRetorno = Trim(Mid(txtLinha, sPosicao(bytColuna - 1) + 1, bytDiferenca))
Case 3:
strRetorno = Trim(Right(txtLinha, Len(txtLinha) - sPosicao(bytColuna - 1)))

End Select

[ô]Retorna
PegaUmaColuna = strRetorno
End Function


Mas... sinto que pode-se melhorar muito esse código acima...

[][ô]s,
Tunusat.
ADILSOO 28/02/2017 18:31:09
#472008

Desculpa, mas não consegui fazer..
Citação:

Exatamente o que o DS2T disse, mas você pode fazer de duas formas a saber:

TUNUSAT 01/03/2017 13:52:43
#472018
ADILSOO,

Mas o que deu errado?

[][ô]s,
Tunusat.
ADILSOO 01/03/2017 19:32:29
#472029
Citação:

Mas o que deu errado?


Mesmo da maneira indicada acima, o mesmo pega todo o conteudo, e não somente a primeira coluna.
TUNUSAT 02/03/2017 11:21:25
#472043
ADILSOO,

A função que eu montei (PegaUmaColuna), pega a coluna que foi passada para ela pegar.

Exemplo:
[ô] - Pegue a coluna [Ô]1[Ô]:
PegaUmaColuna(List1.List(Item), 1)

Mas se você quiser remover isso, depure o código da função [Ô]PegaUmaColuna[Ô] e rewtire o tratamento de colunas. Exemplo:

  strRetorno = Trim(Mid(txtLinha,  1, 3)) 


O código acima quer dizer, retorne:
- 1 - Faça um TRIM de tudo (limpe espaços brancos antes e depois);
- 2 - Pegue a partir da 1ª posição as 3 próximas posições;


[][ô]s,
Fabio Ingenito.
Tópico encerrado , respostas não são mais permitidas