Excel VBA-从另一个列表框填充一个列表框(在工作表中,而不是用户窗体中)

时间:2019-10-18 15:33:48

标签: excel vba

我有一个工作表,其中包含发票数据为the image below

some table

然后,我创建了一个数据透视表以对所有发票求和(数据透视表将具有相同编号的发票分组的主要原因);然后,我创建了一个列表框,该列表框由该数据透视表中的数据填充。

最后一步,我需要能够从第一个列表框中选择一个发票,并仅用所选的发票编号和所有相关数据填充另一个列表框。

我能够执行所有这些步骤,直到最后一步,当您使用addItem填充列表框时,我的问题与10列限制有关。我需要帮助,找到一种方法来打包超过10列的第二个列表框。

这是我用来填充第一个列表框和第二个列表框的代码(当超过10列时,我的代码有问题):

Sub populatelstPO()

Dim ws      As Worksheet
Dim rng     As Range
Dim MyArray                 ' variant, receives one based 2-dim data field array
'~~> Change your sheetname here
'Set ws = Sheets("PurchaseRawData")
Set ws = Sheets("Sheet1")

'~~> Set you relevant range here
Set rng = ws.Range("A6:H" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row)

    With Sheets("INVOICES LIST").lstInvoices
        .Clear
        .ColumnHeads = False
        .ColumnCount = rng.Columns.Count
    
        '~~> create a one based 2-dim datafield array
         MyArray = rng
    
        '~~> fill listbox with array values
        .List = MyArray
    
        '~~> Set the widths of the column here. Ex: For 5 Columns
        '~~> Change as Applicable
        .ColumnWidths = "120;100;110;120;120;110;110;100"
        .TopIndex = 0
    End With
    
    Range("A1").Select

End Sub

使用上面的代码,我得到this

some other table

这里的代码是根据第一个列表框中的选定发票填充第二个列表框:

Sub populatelstInvoiceItems()

Dim ws As Worksheet
Dim rng As Range
Dim LastRow As Long
Dim lC As Integer
Dim r As Integer

Set ws = Sheets("PurchaseRawData")
LastRow = ws.Range("C65536").End(xlUp).Row

Set rng = ws.Range("C3:Z" & ws.Range("C" & ws.Rows.Count).End(xlUp).Row)

lC = 0
    With Sheets("INVOICE ITEMS").lstInvoiceItems
        .Clear
        .ColumnWidths = "120;100;110;120;120;110;110;100;100;100"
        For r = 3 To LastRow
            If ws.Cells(r, 3) = Sheets("INVOICE ITEMS").Cells(7, 5) Then
                
                .AddItem
                .List(lC, 0) = ws.Cells(r, 13)
                .List(lC, 1) = ws.Range("N" & r)
                .List(lC, 2) = ws.Range("D" & r)
                .List(lC, 3) = ws.Range("P" & r)
                .List(lC, 4) = ws.Range("R" & r)
                .List(lC, 5) = ws.Range("S" & r)
                .List(lC, 6) = ws.Range("J" & r)
                .List(lC, 7) = ws.Range("K" & r)
                .List(lC, 8) = ws.Range("W" & r)
                .List(lC, 9) = ws.Range("L" & r)
                
                lC = lC + 1
            End If
        Next
        If .ListCount = 0 Then MsgBox "No data found"
    End With
    
End Sub

仅将发票1234的第二个列表框填充为below

yet another table

因此,当我尝试执行另一个.AddItem限制为10个时,就会出现我的问题。

我非常感谢您提供解决此问题的帮助。

非常感谢。

0 个答案:

没有答案