Списки "связывания" VBA для получения данных c - PullRequest
0 голосов
/ 23 января 2020

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

У меня есть две таблицы Excel , Одна - это база данных, другая взаимодействует с ней. В базе данных у меня есть несколько параметров заголовков: имя, код и три других параметра, которые мы будем называть данными, чтобы суммировать их. На интерактивном листе мне нужно окно выбора с раскрывающимся списком для имени, в котором я выберу имя, и окно выбора с раскрывающимся списком для кода, в котором я выберу Код, который относится к имени. (Есть несколько экземпляров Name, которые являются одинаковыми, но отличаются из-за их уникального кода.) После того, как имя и правильный код были выбраны, мои Данные загружаются в окно результатов, которое перегруппирует Имя, Код и соответствующие данные.

До сих пор мне удалось составить список с включенными в него именами, используя этот метод:

Sub NameList()
    Range("A13").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=DB!$A$2:$A$800"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub

Проблема здесь в том, что он не дает мне уникальность значения, и так как у меня есть несколько похожих имен, раскрывающийся список является длинным и запутанным. Что касается кода, я должен найти его сам, а затем ввести его. Как только я нажимаю кнопку «загрузка данных», я получаю все в своем окне результатов по своему желанию.

Чтобы подвести итог, мои потребности заключаются в следующем: - Получить уникальные значения в раскрывающемся списке для имен - Получить значения кода, соответствующие значению имени, выбранному непосредственно перед этим.

Заранее благодарим за любую помощь.

1 Ответ

0 голосов
/ 23 января 2020

Я бы сделал что-то вроде этого, чтобы получить уникальные значения. Вторым аргументом в dic.add можно добавить массив соответствующих номеров строк. Тогда ваш первый список будет join из keys, а второй будет join из ячеек с номерами строк, содержащимися в коллекции items.

См. Эту статью https://excelmacromastery.com/vba-dictionary/

Sub DynamicCombo()

Dim dic As New Scripting.Dictionary
Dim l As Long
Dim c As Excel.Range

    For Each c In Range("AB1:AB10").Cells
        If Not dic.Exists(CStr(c)) Then
            dic.Add CStr(c), c.value '  Use an array here to hold row #'s
        End If
    Next c

    With Range("AC1").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=Join(dic.Keys(), ",")
        .IgnoreBlank = True
        .InCellDropdown = True
        .ShowInput = True
        .ShowError = True
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...