Управление динамическим списком 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