Как последовательно заполнять списки со списком из массивов - PullRequest
0 голосов
/ 07 мая 2020

У меня есть форма пользователя, в которой есть несколько полей со списками. Эти списки должны загружаться из нескольких динамических c массивов на листе. Я знаю, как заполнить одно поле со списком массивом, но я хотел бы заполнить каждый соответствующей информацией из массивов. У меня есть код для загрузки одного, но я думаю, что если бы я переписал код для каждого из них, то код был бы очень медленным и утомительным. Подскажите, как это сделать более эффективно? enter image description here

The code to fill the Device Brand/Model combobox is as follows:

Private Sub UserForm_Initialize()
Dim machbrandmod As Range

Dim ws As Worksheet
Set ws = Worksheets("Arrays")

For Each machbrandmod In ws.Range("mach_type")
Me.nd_mod_cb.AddItem machbrandmod.Value
Next machbrandmod

End Sub

enter image description here

Нужно ли мне выходить из подпрограммы, определять следующий Dim, а затем переписывать код для следующего поля со списком? Или есть более эффективный способ?

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Предположим, что ваши диапазоны выглядят так, как на вашем рисунке, то есть несколько строк одного и того же столбца (что-то вроде «A2: A6»), простое решение будет следующим:

Dim arr As Variant
arr = ws.Range("mach_type").value: Me.nd_mod_cb.list = arr

Если ваш диапазон имеет только строку и несколько столбцов (что-то вроде "A1: E1"), вы можете использовать:

 arr = ws.Range("mach_type").value: Me.nd_mod_cb.list = WorksheetFunction.Transpose(arr)
1 голос
/ 07 мая 2020

Можно сделать примерно так:

Private Sub UserForm_Initialize()

    FillList "mach_type", Me.nd_mod_cb
    FillList "other_list", Me.other_cb
    'etc

End Sub

Sub FillList(rangeName as String, lst As Object)
    Dim c As Range
    For Each c In Worksheets("Arrays").Range(rangeName).Cells
        lst.AddItem c.Value
    Next c
End Sub
...