Значение раскрывающегося списка Excel в соседнем столбце - PullRequest
0 голосов
/ 09 апреля 2020

Код работает для столбца 3, однако, когда я добавляю дополнительную строку для столбца 10, это не так. Я хотел бы иметь возможность запустить это для нескольких разных столбцов на одном листе. Спасибо.

Private Sub Worksheet_Change(ByVal Target As Range)
selectedNa = Target.Value
If Target.Column = 3 Then
    selectedNum = Application.VLookup(selectedNa, Worksheets("Risk Dropdowns").Range("B3:C30"), 2, False)

If Target.Column = 10 Then
    selectedNum = Application.VLookup(selectedNa, Worksheets("Risk Dropdowns").Range("E3:F30"), 2, False)

        If Not IsError(selectedNum) Then
            Target.Value = selectedNum
        End If
    End If
End If

End Sub

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

вы должны воспользоваться Select Case синтаксисом

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.CountLarge > 1 Then Exit Sub 'exit of more than one cell changed

    Dim selectedNA As Variant ' use a Variant to store a possible error

    Select Case Target.Column
        Case 3
            selectedNA = Application.VLookup(Target.Value, Worksheets("Risk Dropdowns").Range("B3:C30"), 2, False)

        Case 10
            selectedNA = Application.VLookup(Target.Value, Worksheets("Risk Dropdowns").Range("E3:F30"), 2, False)

        Case … ' add all cases you need
            selectedNA = Application.VLookup(Target.Value, Worksheets("Risk Dropdowns").Range("...."), 2, False) 'adjust Range to current case

        Case Else
            Exit Sub

    End Select

    If Not IsError(selectedNA) Then ' if VLookup succesful
        Application.EnableEvents = False 'disable events not to call this sub recursively
        Target.Value = selectedNA
        Application.EnableEvents = True ' enable events back
    End If


End Sub
0 голосов
/ 09 апреля 2020

Вложенная логарифм IF c неверен. В настоящее время, если номер столбца не равен 3, он выходит из if, а 10 никогда не проверяется. Используйте ElseIf. И потяните другой чек на свой, если.

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim selectedNA As Variant
    selectedNA = Target.Value

    On Error GoTo safeout
    Application.EnableEvents = False
    Dim selectedNum As Variant
    If Target.Column = 3 Then
        selectedNum = Application.VLookup(selectedNA, Worksheets("Risk Dropdowns").Range("B3:C30"), 2, False)
    ElseIf Target.Column = 10 Then
        selectedNum = Application.VLookup(selectedNA, Worksheets("Risk Dropdowns").Range("E3:F30"), 2, False)
    End If
    If Not selectedNum Is Nothing Then
        If Not IsError(selectedNum) Then
            Target.Value = selectedNum
        End If
    End If

safeout:
    Application.EnableEvents = True

End Sub
...