Заполните ComboBox из таблицы - PullRequest
1 голос
/ 08 июня 2019

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

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

Я запустил код отдельно и вижу, как заполняется массив списков.

Я попытался переопределить массив списков, но возникла ошибка, сообщающая, что он уже dim'd.

Я подозреваю, что я слишком усложняю код для заполнения поля со списком.

Private Sub UserForm_Initialize()

'Populate Combo list values

ComboBox1.ColumnCount = 2

Dim myTable As ListObject
Dim myArray As Variant
Dim x As Long, NumItems As Long

Set myTable = Worksheets("RefTable").ListObjects("AccountTable")

myArray = myTable.DataBodyRange
NumItems = UBound(myArray)

Dim ComboList(1 To 20, 1 To 2) As String

Dim i As Integer, j As Integer

For i = 1 To 20
    For j = 1 To 2
       ComboList(i, j) = myArray(i, j)
    Next j
Next i

ComboBox1.List = ComboList

End Sub

Форма вообще не отображается!

1 Ответ

1 голос
/ 08 июня 2019

Вы довольно близки с вашим кодом, я только что внес изменения в ваши массивы:

Private Sub UserForm_Initialize()

'Populate Combo list values

ComboBox1.ColumnCount = 2

Dim myTable As ListObject
Dim myArray As Variant
Dim i As Long, j As Long

Set myTable = Worksheets("RefTable").ListObjects("AccountTable")

myArray = myTable.DataBodyRange

Dim ComboList() As String: ReDim ComboList(1 To UBound(myArray), 1 To UBound(myArray, 2))

For i = LBound(ComboList) To UBound(ComboList)
    For j = LBound(ComboList, 2) To UBound(ComboList, 2)
       ComboList(i, j) = myArray(i, j)
    Next j
Next i

ComboBox1.List = ComboList

End Sub

В качестве альтернативы вы можете просто использовать первый массив:

Private Sub UserForm_Initialize()

'Populate Combo list values

ComboBox1.ColumnCount = 2

Dim myTable As ListObject
Dim myArray As Variant

Set myTable = Worksheets("RefTable").ListObjects("AccountTable")

myArray = myTable.DataBodyRange

ComboBox1.List = myArray

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