Notifications
Clear all

Retornar Coluna Selecionada no ListBox

4 Posts
2 Usuários
0 Reactions
1,967 Visualizações
themrl16
(@themrl16)
Posts: 60
Trusted Member
Topic starter
 

Boa tarde a todos!

Estou montando alguns formulários para controles, e estou na seguinte situação:
Quando o usuário selecionar um registro na ListBox, deverá aparecer uma MsgBox informando o valor da Linha clicada. Essa listBox possuirá 3 colunas, onde o usuário deverá clicar em uma linha para exibir qual é o valor da Linha x Coluna clicada.
Eu consigo retornar o valor da Coluna 1, Coluna 2 ou Coluna 3, conforme mostra o exemplo anexado. Porém, eu não sei em qual das 3 colunas da listbox o usuário clicou... com o a macro que criei, consigo descobrir qual foi a linha clicada, porém não dá para saber qual foi a coluna.

Vocês saberiam me informar se há uma forma de retornar o index da linha, bem como da coluna clicada? :roll:

Segue abaixo a macro que estou utilizando, e em anexo um arquivo de exemplo.

Private Sub ListBox1_Click()
    MsgBox ListBox1.List(ListBox1.ListIndex, 0) '0 = Coluna A
    'Gostaria de saber se é possível descobrir além da Linha, qual foi a coluna clicada
End Sub

Abraços,

Murilo.

Leia as REGRAS
Utilize arquivos COMPACTADOS
PESQUISE
AGRADEÇA clicando na mãozinha ao lado da ferramenta citar.
Marque o tópico como [Resolvido], clicando no ao lado do botão citar.

Abraços,

Murilo L
------------
e-mail: [email protected]
skype: fareva_mlima

 
Postado : 16/07/2014 1:07 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Até onde sei listbox não tem essa propriedade. Talvez (não testei) possa interceptar no evento mouseDown o valor da coordenada X e montar algo +/- se(X<27, Coluna1....

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 16/07/2014 2:18 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Existe a possibilidade de se captar a Linha Clicada, quanto a Coluna eu não entendi direito, se irá clicar na Coluna (Cabeçalho) ou um item separado na Coluna, o que até onde eu sei não é possivel, pois só conseguimos selecionar a Linha.

No link abaixo tem umas rotinas que com algumas adaptações captamos o valor selecionado na linha x Coluna, é só acompanhar o resultado das Variáveis a teremos a qual coluna e linha pertencem.
VBA code for selected item in listbox
http://www.mrexcel.com/forum/excel-ques ... stbox.html

Por exemplo nesta adaptação terá qual a Linha foi Clicada, lembrando que no VBA a contagem de Linhaa e Coluna na maioria dos controles começa em "0" - Zero, por isto o +1 em msg = J + 1:

Private Sub ListBox1_Click()

Dim J As Long
Dim msg As String

    For J = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(J) Then
            msg = J + 1
        End If
    Next J
    
    MsgBox "Você Clicou na Linha :- " & msg

End Sub

Espero que ajude.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 16/07/2014 7:37 pm
themrl16
(@themrl16)
Posts: 60
Trusted Member
Topic starter
 

Bom dia Reinaldo / Mauro!

Eu utilizei o evento ListBox1_MouseDown para pegar as coordenadas e atualizar o valor de duas variáveis globais, que são utilizadas em um condicional IF dentro da ListBox1_DblClick. A macro ficou bem funcional e atendeu minha necessidade, pois ao dar um duplo click na ListBox, ele irá comparar as coordenadas com a área clicada na listbox, e informar qual das três colunas foi clicada:

Agradeço a ajuda e disposição dos dois e de todo o fórum:

Dim coordX As Single
Dim coordY As Single

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    If coordX <= 40 Then
        MsgBox "coluna A"
    ElseIf coordX > 40 And coordX <= 80 Then
        MsgBox "coluna B"
    Else: MsgBox "coluna C"
    End If
End Sub

Private Sub ListBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    coordX = X
    coordY = Y
End Sub

Abraços,

Murilo.

Leia as REGRAS
Utilize arquivos COMPACTADOS
PESQUISE
AGRADEÇA clicando na mãozinha ao lado da ferramenta citar.
Marque o tópico como [Resolvido], clicando no ao lado do botão citar.

Abraços,

Murilo L
------------
e-mail: [email protected]
skype: fareva_mlima

 
Postado : 17/07/2014 5:56 am