2017-08-08 7 views
0

Je suis un débutant. (Pardonnez mon anglais)Boîte de liste de deux colonnes avec la valeur de la feuille

J'ai créé une facture pour moi-même, il y a une vue formulaire utilisateur qui initialise avec ce code:

Private Sub UserForm_Initialize() 

    'Populate listbox with unique invoice numbers from sheet "Invoice data" 

    Dim Test As New Collection 
    Dim rng As Variant 
    Dim Value As Variant 

    'Identify range 
    rng = Sheets("Invoice data").Range("A2:A" & _ 
    Sheets("Invoice data").Columns("A").Find("*", _ 
    SearchOrder:=xlRows, SearchDirection:=xlPrevious, _ 
    LookIn:=xlValues).Row) 

    'Filter unique values 
    On Error Resume Next 
    For Each Value In rng 
    If Len(Value) > 0 Then Test.Add Value, CStr(Value) 
    Next Value 
    On Error GoTo 0 

    For Each Value In Test 
    ListBox1.AddItem Value 
    Next Value 

    ListBox1.ListIndex = 0 

End Sub 

Dans cette forme d'utilisateur que j'ai une liste-case pour afficher le numéro d'identification dans les feuilles ("données de facturation") La plage est la colonne "A".

J'ai besoin de convertir cette zone de liste dans une boîte à deux colonnes, la première colonne devrait afficher "A" et la colonne suivante devrait afficher "C".

Pouvez-vous me guider?

Merci d'avance.

+0

a frappé d'abord sur Google: https://stackoverflow.com/questions/11213962/vba-listbox-multicolumn-add –

+0

Salut Williams, cette réponse n'a pas résolu mon problème .. –

+0

Quel est exactement le problème? Comment faire une liste de deux colonnes? Peut-être que cela aidera - http://software-solutions-online.com/vba-multi-column-listboxes/ Si vous utilisez un dictionnaire au lieu d'une collection, vous pouvez plus facilement vérifier les valeurs uniques, en les ajoutant à la liste allez (et cela signifie que vous pouvez aussi ajouter la valeur "c" ('Value.Offset (0,2) .Value'). BTW J'éviterais d'utiliser' Value' comme nom de variable ... –

Répondre

0

utilisant un dictionnaire pour suivre les valeurs uniques:

Private Sub UserForm_Initialize() 

    'Populate listbox with unique invoice numbers from sheet "Invoice data" 
    Dim dict As Object, sht As Worksheet 
    Dim rng As Range, c As Range, v, i As Long 

    Set dict = CreateObject("scripting.dictionary") 
    Set sht = Sheets("Invoice data") 

    'Identify range 
    Set rng = sht.Range("A2:A" & _ 
     sht.Columns("A").Find("*", SearchOrder:=xlRows, _ 
     SearchDirection:=xlPrevious, LookIn:=xlValues).Row) 

    'Filter unique values 
    For Each c In rng.Cells 
     v = c.Value 
     'any value to add? 
     If Len(v) > 0 Then 
      'new value? 
      If Not dict.exists(v) Then 
       With Me.ListBox1 
        .AddItem 
        .List(i, 0) = v 
        .List(i, 1) = c.Offset(0, 2).Value 
       End With 
       i = i + 1 
       dict.Add v, 1 
      End If 
     End If 
    Next c 

    Me.ListBox1.ListIndex = 0 

End Sub