2017-08-08 44 views
0

我是新手。 (请原谅我的英语)带有图表值的两列列表框

我已经创建了自己的发票,有一种观点用户的形式,与此代码初始化:

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 

在此用户表单我有一个列表框,显示表单中的ID号(“发票数据”)范围是列“A”。

我需要这个列表框转换成两组中,第一列应显示“A”和下一列应显示“C”。

你可以指导我?

在此先感谢。

+0

首先击中谷歌:https://stackoverflow.com/questions/11213962/vba-listbox-multicolumn-add –

+0

嗨威廉姆斯, 这个问题的答案没有解决我的问题.. –

+0

究竟是什么问题?如何制作两列列表框?也许这会有所帮助 - http://software-solutions-online.com/vba-multi-column-listboxes/如果您使用Dictionary而不是Collection,那么您可以更轻松地检查唯一值,并将其添加到列表中去(这意味着你也可以添加“c”值('Value.Offset(0,2).Value')。BTW我会避免使用'Value'作为变量名... –

回答

0

使用字典来追踪唯一值:

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