2017-08-08 4 views
0

Ich bin ein Neuling. (Verzeihen Sie mein Englisch)Zweispaltige Listenfeld mit Blatt Wert

Ich habe eine Rechnung für mich erstellt, gibt es eine Benutzer-Form, die mit diesem Code initialisiert werden:

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 

In diesem User-Formular Ich habe ein Listenfeld zu zeigen, die ID-Nummer in den Blättern ("Rechnungsdaten") Bereich ist Spalte "A".

Ich muss dieses Listenfeld in ein zweispaltiges Feld konvertieren, die erste Spalte sollte "A" anzeigen und die nächste Spalte sollte "C" anzeigen.

Können Sie mich führen?

Vielen Dank im Voraus.

+0

ersten Treffer bei Google: https://stackoverflow.com/questions/11213962/vba-listbox-multicolumn-add –

+0

Hallo Williams, diese Antwort löste mein Problem nicht. –

+0

Was genau ist das Problem? Wie erstelle ich ein zweispaltiges Listenfeld? Vielleicht hilft dies - http://software-solutions-online.com/vba-multi-column-listboxes/ Wenn Sie ein Dictionary anstelle einer Collection verwenden, können Sie einfacher nach eindeutigen Werten suchen und sie so zur Liste hinzufügen gehen (und das bedeutet, dass Sie auch den "c" -Wert hinzufügen können ('Value.Offset (0,2) .Value'). BTW Ich würde vermeiden," Value "als Variablenname zu verwenden ... –

Antwort

0

ein Wörterbuch verwenden eindeutige Werte zu verfolgen:

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