Excel VBA Combobox пользовательской формы - загрузка значений нескольких столбцов - PullRequest
0 голосов
/ 04 июля 2019

Я использую этот код для загрузки значений используемого диапазона в столбце C. Это работает нормально, однако мне нужно также загружать значения в столбцах E и G внутри поля со списком, разделенных символом "-", поэтому, например, каждая запись в поле со списком будет иметь значение "Row 1 Col C value - Row 1 Col E value - Row 1 Col G value".

 Private Sub UserForm_Initialize()
    Dim lastrow As Long
    Dim ws As Worksheet
    ws = mysheet
        lastrow = ws.Columns("C").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        tag_combo.List = ws.Range("C" & ws.Range("start_row_pu").Row + 1 & ":" & "C" & lastrow).Value2
    End If

    End Sub

1 Ответ

1 голос
/ 04 июля 2019

Пример вызова соединяющих значений столбцов

Как можно ближе к исходному сообщению, вы можете прочитать все значения в 1-мерный 2-кратный временный массив, объединить 1-й, 3-й и 5-йзначения столбцов на & и присвоить их обратно свойству .List в выпадающем списке:

Private Sub UserForm_Initialize()
    Dim ws As Worksheet
    Set ws = Worksheets("Tabelle1")
    Dim lastrow As Long, i As Long
        lastrow = ws.Columns("A").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    Dim v       As Variant
        v = ws.Range("C" & ws.Range("start_row_pu").Row + 1 & ":" & "G" & lastrow).Value2

        For i = LBound(v) To UBound(v)            ' join column values C, E, G
            v(i, 1) = v(i, 1) & " - " & v(i, 3) & " - " & v(i, 5)
        Next i
        ReDim Preserve v(1 to Ubound(v), 1 to 1)   ' redimension temporary array to 1 column 
        ComboBox1.List = v                         ' assign array back to .List property
End Sub

Дополнительные примечания по вопросу в комментарии

После присвоения диапазонаданные (например, C2:G4711) в 2-мерный массив вариантов на основе 1 v теперь необходимо выполнить цикл по данным массива на основе 1, где

  • LBound(v) всегда начинается с "строка" 1 в массиве на основе 1 (так называемая нижняя граница) и
  • UBound(v) возвращает верхнюю границу, например 4710 (= 4711 - 2+ 1, начиная со второго ряда) "строки" ;

теперь вы ссылаетесь на данные столбца C в исходном диапазоне через "столбец" индекс 1 варианта массива, т.е. v(i, 1) до E через индекс 3: v(i, 3), до G через индекс 5: v(i, 5).Приведенный выше пример объединяет 1-е, 3-е и 5-е значения в элементах массива column через соединитель & и таким образом присваивает результирующую строку обратно первому столбцу массива (более) запись уже прочитанного в столбце данных диапазона C.

В конце концов вам придется изменить размеры исходных 5 столбцов массива только на один, чтобы представить нужную строку данных, подключенную сейчас " - ".

...