Как выбрать несколько списков одновременно в Excel VBA - PullRequest
0 голосов
/ 10 сентября 2018

Сценарий

У меня есть два списка с именами openItemList и serialNumber. serialNumber записи являются уникальными номерами для каждой строки openItemList. Это означает, что каждый openItemList имеет уникальный serialNumber. Но openItemList может иметь повторяющиеся значения в разных строках. Пользователь может понять только openItemList, и они выбирают это. Поскольку соответствующий serialNumber также выбирается на основе выбора openItemList, моя программа находит соответствующие данные строки, используя serialNumber в качестве критерия поиска, и соответствующим образом обновляет правильную строку.

В настоящее время я могу выбрать оба списка одновременно, потому что я установил свойство множественного выбора для одной записи. Я использую следующий код, чтобы сделать это

Private Sub openItemList_Click()
    serialNumber.ListIndex = openItemList.ListIndex
End Sub

Private Sub openItemList_Scroll()
    serialNumber.TopIndex = openItemList.TopIndex
End Sub

Private Sub serialNumber_Click()
    openItemList.ListIndex = serialNumber.ListIndex
End Sub

Private Sub serialNumber_Scroll()
    openItemList.TopIndex = serialNumber.TopIndex
End Sub

Текущая проблема

Теперь я хочу позволить пользователю выбрать несколько строк в списке, чтобы пользователь мог обновить несколько строк одновременно. В тот момент, когда я изменил свойство списка двух на MultiSelectExtended, зависимость выбора больше не работает. Из-за этого я больше не могу искать соответствующие строки на основе serialNumber. Кто-нибудь знает, как выбрать оба списка одновременно при переходе в режим MultiSelectExtended?

В настоящее время так ведут себя два списка. В тот момент, когда я выбираю один список, также выделяется соответствующее значение другого списка.

enter image description here

В тот момент, когда я переключаюсь на Multiselect, он действует как показано ниже без какого-либо одновременного выбора

enter image description here

1 Ответ

0 голосов
/ 10 сентября 2018

Вы должны:

  • использовать Change событие вместо Click один

  • соответствует обоим спискам каждого элемента Selected свойство:

следующим образом:

Private Sub openItemList_Change()
    Dim i As Long
    With openItemList
        For i = 0 To .ListCount - 1
            serialNumber.Selected(i) = .Selected(i)
        Next
    End With
End Sub

также, измените openItemList_Scroll() на openItemList_MouseDown(), чтобы пара списков видимых элементов

...