Итак, я запускаю приложение VBA, которое находит связанные ячейки для значения, создает из них диапазон, а затем заполняет раскрывающийся список проверки данных, связывая этот диапазон с именем.
Это позволялосоздать динамически заполненный список с раскрывающимся списком, выполнив следующие действия:
Изменение события вызывает запуск кода
Затем выполняется сканирование другого листазначение, введенное пользователем
Когда это значение найдено, ячейка в этой строке добавляется к объекту диапазона
Этот объект диапазона получаетего свойство Range.Name, назначенное с использованием информации из ячейки, в которой находится раскрывающийся список.
Это работало в более старой версии excel
То, что раньше происходило-> Имя: LotnumbersF3 == созданное имя Список проверки Источник = ничего -run код -строить диапазон -assign range.name = LotnumbersF3 -Drop Вниз список заполняется информацией о диапазоне
Что происходит сейчас->range.Name = Нетвещь запустить код range.Name = "LotnumbersF3" // мой код делает это // Проверить значение имени range.Name = "= sheet! $ D $ 7, sheet! $ D $ 21 ......
Мне нужно, чтобы имя совпадало с конкретным значением, почему оно изменилось?
Редактировать:
Итак, вот код, который ассоциируется с именем, уже созданным на листе:
ListNamePostFix = Replace(Target.Offset(0, 1).AddressLocal, "$", "")
Итак, теперь я запускаю соответствующий alg, который использует до трех потенциальных уникальных ключей для описания различных ассоциаций выпадающего списка.Некоторые из списков зависят от значения, выбранного в других выпадающих списках:
For Each RngCell In WorkingRng
If ThreeArgs Then
If Target.Offset(0, -7).Value = RngCell.Value _
And Target.Offset(0, -2).Value = RngCell.Offset(0, 2).Value _
And Target.Value = RngCell.Offset(0, 1).Value Then
If Not NamedRng Is Nothing Then
Set NamedRng = Union(NamedRng, ASP.Cells(Index, Column))
Else
Set NamedRng = ASP.Cells(Index, Column)
End If
End If
Index = Index + 1
ElseIf TwoArgs Then
If Target.Offset(0, -5).Value = RngCell.Value And Target.Value = RngCell.Offset(0, 2).Value Then
If Not NamedRng Is Nothing Then
Set NamedRng = Union(NamedRng, ASP.Cells(Index, Column))
Else
Set NamedRng = ASP.Cells(Index, Column)
End If
End If
Index = Index + 1
Else
If RngCell.Value = Target.Value Then
If Not NamedRng Is Nothing Then
Set NamedRng = Union(NamedRng, ASP.Cells(Index, Column))
Else
'innitializes the range object with first match.
Set NamedRng = ASP.Cells(Index, Column)
End If
End If
Index = Index + 1
End If
Next
Эта функция вызывается до этого:
If Not NamedRng Is Nothing Then
ListName = ListName & ListNamePostFix
NamedRng.Name = "LOTNUMBERS"
Else
Set NamedRng = Cells(1, 1)
ListName = "LOTNUMBERS" & ListNamePostFix
NamedRng.Name = ListName
End If
И в более старой версии, не знаю, какая именно,Excel это работает нормально.Но теперь, согласно чудесному ответу, при условии, что мы видим, что объект Name больше не ассоциируется со строкой, но происходит какое-то нечестивое объединение элементов диапазона, которые были добавлены в рабочий диапазон.ПОЧЕМУ !!!!! ????