Excel VBA: Поиск по таблице из введенных данных строк и столбцов и отображение в списке

#excel #vba

Вопрос:

Я пытался написать код для извлечения данных из таблицы, введя данные строк и столбцов и отобразив результат в списке для выбора.

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

Вот фотография моей формы пользователя введите описание изображения здесь

Вот фотография моего стола введите описание изображения здесь

 Private Sub CommandButton1_Click()

'to search and display in listbox when search button is pressed'

Dim Col As Integer
Dim Row As Integer

cmbCountry.Value("Australia") = 1
cmbCountry.Value("Belgium") = 2
cmbCountry.Value("Canada") = 3
cmbCountry.Value("China") = 4
cmbCountry.Value("China (ET)") = 5
cmbCountry.Value("India") = 6
cmbCountry.Value("Mexico") = 7
cmbCountry.Value("Netherland") = 8
cmbCountry.Value("Peru") = 9
cmbCountry.Value("UK") = 10
cmbCountry.Value("USA") = 11

Row = cmbCountry.Value
Col = txtquant.Value

Price = Sheets("Despatch").DesTable(Row, Col)

ListBox1.AddItem Sheets("Data").Cells(Rowm, 1).Value
ListBox1.List(ListBox1.ListCount - 1, 1) = Sheets("Data").Cells(Row, 2).Value


End Sub
 

Ответ №1:

Это мой код, надеюсь, это поможет

 Private Sub UserForm_Activate()

    ' better using event Activate to dynamically change the data

    ' extract country list from table
    ' so you can add or remove country directly from your tabel
    
    CountryListArray = Sheet1.ListObjects("DetailTabel").DataBodyRange.Columns(1).Value
    CountryList.List = CountryListArray
    
End Sub
 

И этот код для выбора из ячейки в таблице на основе выбранной страны и количества

 Private Sub CountryList_Click()
    
    ' check if quantity blank or not
    Quantity = QuantityText.Value
    
    If Quantity = "" Then
        MsgBox "You have fill quantity field"
    
    Else
        ' if quantity field has filled
        LabelDespatch.Caption = Sheet1.ListObjects("DetailTabel").DataBodyRange.Cells(CountryList.ListIndex   1, Quantity   1)
    End If
 

Конец Суб

Результат введите описание изображения здесь