с толчком вниз Если значение ячейки = Combobox - Показать в пользовательской форме combobox - VBA - PullRequest
0 голосов
/ 05 октября 2018

Я хочу завершить код следующим образом: Нажатие «CommandButton1», если ячейка равна значению «ComboBox1», выбирается и отображается в «ComboBox1».

Мой код(не завершено):

Private Sub UserForm_Initialize()
Dim xRg As Range
Set xRg = Worksheets("LookupLists").Range("A1:B5")
Me.ComboBox1.List = xRg.Columns(1).Value
End Sub

Private Sub CommandButton1_Click()
If Sheets("Sheet1").Range("A1") = "" Then
    Beep
    Else
    If Sheets("Sheet1").Range("A1") = xRg Then
    'What code should I write here to if
    '"Sheets("Sheet1").Range("A1")=Worksheets("LookupLists").Range("A1:B5")" show the amount in comboBox1?
    End If
End If
End Sub

1 Ответ

0 голосов
/ 05 октября 2018

Как сопоставить значение в выпадающем списке со 2-м столбцом и выделить найденный элемент

Это не было , что легко понять, что вы на самом деле хотелиделать.

Поскольку вы имеете в виду диапазон данных из двух столбцов A:B, но отображаете только первый столбец диапазона (возможно, идентифицирующий, например, имена или идентификаторы ) в комбинированном списке, я предполагаю следующее:

  • После нажатия элемента управления CommandButton1 и
  • при условии, что данное значение ячейки (A1) равно 2-му значение столбец ComboBox1 ( возможно скрытый ),
  • соответствующий элемент ComboBox1 ( отображающий, например, имена ) должен быть выбран (выделен).

Прикладной метод

Важной строкой кода в процедуре события CommandButton1_Click является присвоение возможного совпадения позиция к переменной pos:

pos = Application.Match(myVal, Application.Index(Me.ComboBox1.List, 0, 2), 0)

As ► Application.Match требуется одномерный массив и ComboBox1.List 2-мерное , функция Application.Index должна извлечь столбец комбинированного списка 2nd (скрытый) (содержащий значения) из списка со спискомтеперь получаем 1-dim массив в качестве аргумента.

... Application.Index(Me.ComboBox1.List, 0, 2) 'cf Примечание *)

  • ) Обратите внимание , что индекс строки в функции Application.Index выше должен быть установлен в0, так что индекс столбца ► 2 может изолировать только 2-й столбец.

Если найдена позиция match , переменная pos получаетчисловой номер элемента, который можно использовать для выбора найденного элемента путем сброса комбинированных списков .ListIndex (вычитая 1, так как индексы блоков основаны на нуле).

Если соответствующее значение не найдено в поле со списком, pos возвращает ошибку, и поэтому необходимо избегать сообщения об ошибке, проверяя эту переменную с помощью функции ► IsError()(именно поэтому pos должен быть объявлен как Variant , а не только как Long , чтобы избежать ошибок несоответствия типов.)

Код пользовательской формы

Option Explicit

Private Sub UserForm_Initialize()
Dim xrg   As Range
Set xrg = ThisWorkbook.Worksheets("LookupLists").Range("A1:B5")
With Me.ComboBox1
    .List = xrg.Value2
    .ColumnCount = 2            ' << provide for data of both columns
    .ColumnWidths = .Width      ' << show only first column in full box width
End With

End Sub

Private Sub CommandButton1_Click()
Dim pos As Variant                      ' item position has to be variant to allow IsError()
Dim myVal
myVal = ThisWorkbook.Worksheets("Sheet1").Range("A1")
If myVal = "" Then
   Beep
Else                                    ' try to get a match and its position
   pos = Application.Match(myVal, Application.Index(Me.ComboBox1.List, 0, 2), 0)
   If IsError(pos) Then pos = 0          ' avoid error msg if not found :-)
   Me.ComboBox1.ListIndex = pos - 1      ' goto item no: index is zero based!
End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...