VBA Range.Name не работает? - PullRequest
0 голосов
/ 14 ноября 2018

Итак, я запускаю приложение VBA, которое находит связанные ячейки для значения, создает из них диапазон, а затем заполняет раскрывающийся список проверки данных, связывая этот диапазон с именем.

Это позволялосоздать динамически заполненный список с раскрывающимся списком, выполнив следующие действия:

  1. Изменение события вызывает запуск кода

  2. Затем выполняется сканирование другого листазначение, введенное пользователем

  3. Когда это значение найдено, ячейка в этой строке добавляется к объекту диапазона

  4. Этот объект диапазона получаетего свойство Range.Name, назначенное с использованием информации из ячейки, в которой находится раскрывающийся список.

  5. Это работало в более старой версии 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 больше не ассоциируется со строкой, но происходит какое-то нечестивое объединение элементов диапазона, которые были добавлены в рабочий диапазон.ПОЧЕМУ !!!!! ????

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...