Excel VBA - проверка данных - использование = INDIRECT () - создание зависимых раскрывающихся списков - PullRequest
0 голосов
/ 14 января 2020

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

(версия Excel 16.32 для OS X)

Чего я хочу достичь : В столбце F я хотел бы создать проверку данных по формуле "= INDIRECT ($ Ei)" - поэтому для ячейки F2 = INDIRECT (E2), ячейка F3 = INDIRECT (E3)

Проблема: Текущий код работает, если выбор в столбце E уже сделан. Если ячейки в столбце E пусты, как и должно быть по умолчанию, я получаю ошибку 1004

Код выглядит в настоящее время так:

Dim currentrows As Integer
Dim i As Integer
Dim indirect_address As Variant

For Each ws In Sheets
    If ws.Name <> "Overview" And ws.Name <> "Hidden" Then
    currentrows = ws.UsedRange.Rows.Count
    ws.Activate
        With Range("E2:E" & currentrows).Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                Operator:=xlBetween, Formula1:="=Hidden!$A$2:$A$4"
        End With
        For i = 2 To currentrows
            indirect_address = "E" & i
            With Range("F" & i).Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                    Operator:=xlBetween, Formula1:="=INDIRECT(" & Range(indirect_address).address(False, False) & ")"
            End With
        Next i
    End If
Next ws

Я специально борюсь с этой частью , поскольку я не понимаю его в полном объеме

Formula1:="=INDIRECT(" & Range(indirect_address).address(False, False) & ")"

Я использовал следующий фрагмент раньше, но это приводит к = INDIRECT ("Ei"), который не работает из-за "" в формуле

Formula1:="=INDIRECT(""" & Range(indirect_address).address(False, False) & """)" 

Спасибо в ожидании -CM

Ответы [ 2 ]

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

Я думаю, что нашел причину и обойти эту проблему. Похоже, что во время выполнения макроса VBA нужен корректный результат, чтобы не выдавать ошибку. Это означает, что поля в столбце E необходимо заполнить допустимыми параметрами для создания действительной проверки данных в столбце F

Это означает, что я предварительно заполняю столбец E параметрами перед созданием раскрывающихся списков в столбце F. После этого я установите значения столбца E обратно на .value = "", и все будет работать как задумано

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

давайте попробуем изменить

Operator:=xlBetween, Formula1:="=INDIRECT(" & Range(indirect_address).address(False, False) & ")"

на

Operator:=xlBetween, Formula1:="=INDIRECT(""" & indirect_address & """)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...