VBA Добавить проверку данных к B и C, если значение в A использует "l oop" - PullRequest
0 голосов
/ 04 марта 2020

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

Есть идеи, как это сделать, чтобы каждый раз, когда значение добавлялось в ячейку в проверке данных, добавлялось в B2 с одним списком и C2 с другим списком? Или это только замедлит лист. В идеале не нужно проверять данные в Bx и Cx, если в столбце Ax нет значения. Цените помощь заранее.

Private Sub Worksheet_Change(ByVal Target As Range)
    'if a value is entered in Ax then Bx will get data validation
    Dim KeyCells As Range
    Dim MyList(5) As String
    MyList(0) = "try"
    MyList(1) = 2
    MyList(2) = "again"
    MyList(3) = 4
    MyList(4) = 5
    MyList(5) = 6

    'want to change to if value in Cell Ax then do data validation, instead of if selected
    Set KeyCells = Range("A2")

    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
        Is Nothing Then

        With Range("B2").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                Operator:=xlBetween, Formula1:=Join(MyList, ",")

            'want to add a second data validation in cell C2, or Cxx if can loop
        End With

    End If

End Sub

1 Ответ

0 голосов
/ 04 марта 2020

Вы имеете в виду это? Он будет запускаться всякий раз, когда изменяется столбец A. Содержимое не пустое.

Возможно, вы захотите добавить проверку, что несколько ячеек не изменены.

Private Sub Worksheet_Change(ByVal Target As Range)

'if a value is entered in Ax then Bx will get data validation
Dim KeyCells As Range
Dim MyList(5) As String
MyList(0) = "try"
MyList(1) = 2
MyList(2) = "again"
MyList(3) = 4
MyList(4) = 5
MyList(5) = 6

If Target.Column = 1 and target.row >2 Then 'column A3 down
    If Len(Target) > 0 Then 'not empty
        With Target.Offset(, 1).Validation 'column B
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                Operator:=xlBetween, Formula1:=Join(MyList, ",")
        End With
        With Target.Offset(, 2).Validation 'column C
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                Operator:=xlBetween, Formula1:=Join(MyList, ",")
        End With
    End If
End If

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