Listbox kolommen uitlezen

Status
Niet open voor verdere reacties.

TheBri

Gebruiker
Lid geworden
8 nov 2017
Berichten
10
Volgende geval.

Code:
[ATTACH]311059.vB[/ATTACH]
Code:
[ATTACH]311061.vB[/ATTACH]
Ik heb een listbox met meerdere kolomen zie boven. Deze word gevoed dmv een draaitabel.
Echter hier wil ik uit selecteren in een userform zodat de gegevens van kolom 1 (indeling) worden gecombineerd met de kolom waar op is geklikt (Optie B). Uitgaande van boven zou ik dan het volgende resultaat willen zien
• InsS = 1 en S
• InsM = 2 en M
• InsL = 0 en L
• InsXL = 2 en XL
Alle kolommen en regels zijn dynamisch, dit betekent dat er ook 2 regels en bv 4 kolommen kunnen zijn.
 

Bijlagen

  • voorbeeld.jpg
    voorbeeld.jpg
    19,3 KB · Weergaven: 95
  • voorbeeld.xlsm
    39,9 KB · Weergaven: 71
Laatst bewerkt:
bedoel je dit:?

In een module:
Code:
Public i As Long

achter jouw formulier:

Code:
Private Sub ListBox1_Click()

    If ListBox1.ListIndex <> -1 Then
         a = ListBox1.List(0, i)
         b = ListBox1.List(ListBox1.ListIndex, i)
    MsgBox a & " - " & b
    End If
End Sub

Private Sub ListBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
i = 0
xx = X

For Each clm In Split(Replace(ListBox1.ColumnWidths, ";", ""), " pt")
    If xx - Val(clm) < 0 Then
        Exit For
    Else
        i = i + 1: xx = xx - Val(clm)
    End If
Next
          
End Sub

En jouw Listbox1.width op 350 zetten (immers het totaal van jouw columnwidths)
 
@E v R

Code:
Private Sub ListBox1_Click()
    with ListBox1
       If .ListIndex > -1 Then  MsgBox .column(0) & " - " & .column(1)
    end with
End Sub
 
@snb
TS wil, althans zo begreep ik het, de kolom in de listbox waar op geklikt wordt

+++ Click-Event zo goed als zo door TS geplaatst gelaten, zou daar DblClick voor gebruiken
 
Laatst bewerkt:
Bedankt Eric,

Iets aangepast maar precies wat ik wilde.
Echter als ik maar 3 regels heb krijg ik een fout melding op deze 2 regels
Code:
 InsXL = ListBox1.List(ListBox1.ListIndex - ListBox1.ListIndex + 4, 0)
            InsXLNr = ListBox1.List(ListBox1.ListIndex - ListBox1.ListIndex + 4, i)
dit kan ik uiteraard oplossen met on error resume next maar misschien niet zo fraai

Code:
Private Sub ListBox1_Click()

    If ListBox1.ListIndex <> -1 Then
            InsS = ListBox1.List(ListBox1.ListIndex - ListBox1.ListIndex + 1, 0)
            InsSNr = ListBox1.List(ListBox1.ListIndex - ListBox1.ListIndex + 1, i)
            
            InsM = ListBox1.List(ListBox1.ListIndex - ListBox1.ListIndex + 2, 0)
            InsMNr = ListBox1.List(ListBox1.ListIndex - ListBox1.ListIndex + 2, i)
            
            InsL = ListBox1.List(ListBox1.ListIndex - ListBox1.ListIndex + 3, 0)
            InsLNr = ListBox1.List(ListBox1.ListIndex - ListBox1.ListIndex + 3, i)
            
            InsXL = ListBox1.List(ListBox1.ListIndex - ListBox1.ListIndex + 4, 0)
            InsXLNr = ListBox1.List(ListBox1.ListIndex - ListBox1.ListIndex + 4, i)
    End If
    
End Sub
 
Laatst bewerkt:
Je moet zoeken in de 1e kolom in de listbox naar S M L XL
Die geeft dan de rij terug

Variabele rijen niet hard coderen
 
TS wil, althans zo begreep ik het, de kolom in de listbox waar op geklikt wordt

Ik denk niet dat het mijn code lukt iets anders te doen.
 
@snb,

Ik leer graag bij ;)

Code:
.column(0) & " - " & .column(1)

Die 1 moet variabel zijn en afhankelijk van op welke kolom in de listbox wordt geklikt
 
@E v R

Dat vind ik nog eens een positieve instelling (waar vind je dat tegenwoordig nog ?) ;)

Ik sluit me er in dit geval volledig bij aan: de aangeklikte kolom detecteren (wat ik helaas over het hoofd had gezien) is voor mij nieuw.

Na enig stoeiwerk kwam ik tot het volgende (de ListBox1_Click gebeurtenis heb ik maar verwijderd):

Code:
Private Sub ListBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If ListBox1.ListIndex < 1 Then Exit Sub
    
    With ListBox1
       sn = Split(.ColumnWidths & ";", " pt;")
       If X < val(sn(0)) Then Exit Sub

        For j = 1 To UBound(sn) - 1
           sn(j) = Val(sn(j - 1)) + Val(sn(j))
        Next
        Caption = .Column(0) & " _ " & .Column(Application.Match(Format(X), sn, 1))
    End With
End Sub
 
Laatst bewerkt:
Final

Sjonge mijn vraag houd jullie wel bezig.
Dit is wat ik er van hebt gebreid.
 

Bijlagen

  • voorbeeld.xlsm
    50,3 KB · Weergaven: 60
Nee hoor, hij houdt ons bezig.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan