Excel VBA - заполнение списка из другого списка (на листе, не в форме пользователя) - PullRequest
0 голосов
/ 18 октября 2019

У меня есть лист с данными счета-фактуры в виде на изображении ниже :

some table

Затем я создал сводную таблицу для суммирования всех счетов (основнойпричина, по которой сводная таблица группирует счет с тем же номером);затем я создал список, заполненный данными из этой сводной таблицы.

Последний шаг, мне нужно иметь возможность выбрать счет из первого списка и заполнить другой список только выбранным счетом # ивсе связанные данные.

Я мог выполнять все эти шаги до последнего шага, где моя проблема касается ограничения в 10 столбцов при заполнении списка с помощью addItem. Мне нужна помощь в поиске способа связывания, чтобы заполнить второй список более 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 только как ниже :

yet another table

Итак, моя проблемаприходит, когда я пытаюсь сделать еще один .AddItem с ограничением 10.

Я был бы очень признателен за любую помощь, чтобы решить эту проблему.

Заранее большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...