Как динамически генерировать и заполнять списки в VBA? - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь динамически генерировать списки (в настоящее время в пользовательской форме) (в зависимости от используемых столбцов исходного листа) и заполнять их записями соответствующих столбцов.

Например:

  • В столбце A есть следующие записи (по одной на строку): яблоко, банан, персик

  • В столбце B: синий, зеленый, красный

UserForm должен сгенерировать два ListBox (один для столбца A, один для столбца B) и заполнить их соответствующими записями этих столбцов.

Я пытался перебирать списки, но япродолжайте получать ошибки, так как я не могу понять, как правильно получить синтаксис.Переменная Lastrow дает мне количество непустых ячеек в столбце и работает правильно (код не показан для лучшего просмотра соответствующего кода.

Я выполнил генерацию Listbox следующим образом:

Dim i As Integer
For i = 1 To 21
    Set LstBx = UserForm1.Controls.Add("Forms.Listbox.1", Name:="Listbox" & i)
Next i

Мне кажется, заполнение списков сложнее:

Dim i As Integer
Dim LB As String
Dim cell As Range

For i = 1 To 21
For Each cell In SourceSheet.Range(Cells(1, i), Cells(LastRow, i)).Cells
    LB = "Listbox" + i
    LB.AddItem cell.Value
Next cell

Следующее объединяет генерацию и популяцию и является реальным кодом, который я пытаюсь исправить:

Dim i As Integer
Dim LB As String
Dim cell As Range

For i = 1 To 21

'Generate
Set LstBx = UserForm1.Controls.Add("Forms.Listbox.1", Name:="Listbox" & i)

'Populate
For Each cell In SourceSheet.Range(Cells(1, i), Cells(LastRow, i)).Cells
    LB = "Listbox" + i

    'the following is the crucial part I am losing hope on:
    'It seems that it is not possible to address Listboxes this way but i cant find another way:
    LB.AddItem cell.Value

Next cell

Я ожидаю генерацию и заполнение списков ListBox в соответствии с динамическим количеством столбцов, но я особенно борюсь с добавлением элементов в правильный ListBox во время цикла. В конце концов, моя цель - просто перенести все столбцы исоответствующие записи в списки, касающиеся динамического столбца и диапазона строк.

1 Ответ

0 голосов
/ 24 июня 2019

Вы можете ссылаться на список по имени следующим образом:

Me.Controls("Listbox" & i).addItem cell.value

Me - это пользовательская форма в этом случае.

...