PEGAR PRIMEIRA COLUNA LISTBOX
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.
Esse é o código de estou usando...
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...
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!
No seu caso, você precisaria de um Replace também para retirar os espaços em branco.
Abraços!
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).
Mas... sinto que pode-se melhorar muito esse código acima...
[][ô]s,
Tunusat.
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.
Desculpa, mas não consegui fazer..
Citação:Exatamente o que o DS2T disse, mas você pode fazer de duas formas a saber:
ADILSOO,
Mas o que deu errado?
[][ô]s,
Tunusat.
Mas o que deu errado?
[][ô]s,
Tunusat.
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.
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:
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.
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