【问题标题】:Excel Dropdown Display Value in Adjacent ColumnExcel 下拉菜单在相邻列中显示值
【发布时间】:2020-04-09 14:18:09
【问题描述】:

该代码适用于第 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

【问题讨论】:

  • 你的End Ifs 放错地方了。如果您修复indentation,您将能够更好地查看逻辑流程。无论如何,Select Case 在这里可能会更好。

标签: excel vba dropdown vlookup


【解决方案1】:

嵌套的 IF 逻辑不正确。目前,如果列号不是 3,它将退出 if 并且永远不会测试 10。使用 ElseIf。并将另一个检查拉到自己的 if 中。

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

【讨论】:

    【解决方案2】:

    您应该受益于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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      相关资源
      最近更新 更多