Управление динамическим списком VBA/Excel

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

Поэтому я решил использовать комбинированный список управления, но есть еще одна проблема с созданием массива...

    Sub Rozwiń298_Zmienianie(Target)
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim m As Integer
    Dim lista() As Variant
    i = 1
    j = 1
    m = 0

    Do While Sheets("Dane").Cells(i, 14) <> Target.Text
        i = i + 1
    Loop
    j = i
    Do While Sheets("Dane").Cells(j, 14) = Target.Text
        j = j + 1
    Loop
    j = j - 1
    k = j - i + 1
    ReDim lista(k)
    For m = 0 To k
        lista(m) = Sheets("Dane").Cells(i, 15).Text
        i = i + 1
    Next m

    Sheets("Formularz").Shapes.Range(Array("Drop Down 298")).Select
    With Selection
        .List = lista
    End With
End Sub

Теперь 2 вопроса... Как-то работает, но выдает довольно странную ошибку после выбора чего-либо из списка (аргумент не обязательный) - что я сделал не так?

Второе: как установить в Worksheet_Change(ByVal Target As Range) условие для выбора чего-либо из этого списка и использования выбранных данных для создания другого списка выбора?

1 ответ

Решение

Попробуйте добавить этот кусок кода. Я уже проверил это. Это хорошо работает.

Dim validationRange As Range

Sheets("Formularz").Cells(6, 2).Select

Set validationRange = Sheets("Dane").Range("P" & i & ":P" & j)

With Selection.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="='Dane'!" & validationRange.Address
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With
Другие вопросы по тегам