如何使用VBA启用多个Excel下拉列表,这些下拉列表输入与用户选择的值不同的值?

时间:2018-11-06 21:20:14

标签: excel vba if-statement drop-down-menu

这是我第一次使用VBA。我正在适应Contextures.com提供的脚本,该脚本带有“ Excel下拉列表自动将产品名称更改为代码”(https://www.youtube.com/watch?v=uLJEMnIT0zM)。我已经成功创建了一个下拉列表,该下拉列表添加了与用户选择的参数类型关联的ID(例如,当用户从数据条目Excel工作表的下拉列表中选择“叶绿素”时,Excel输入与该参数关联的ID号基于第二个工作表的表格中包含的列表在同一单元格中的名称)。但是,当我尝试添加更多选项时,脚本停止工作。修改后的代码为其他列下拉列表添加了两个ElseIf语句。

脚本运行时不会报告任何错误。同样,奇怪的是,它偶尔会在第一次尝试时起作用。代码如下。

在此先感谢您的帮助。


Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Cells.Count > 1 Then GoTo exitHandler

If Target.Column = 2 Then
    If Target.Value = "" Then GoTo exitHandler
    Application.EnableEvents = False
    Target.Value = Worksheets("CHLA Maps").Range("B1") _
        .Offset(Application.WorksheetFunction _
        .Match(Target.Value, Worksheets("CHLA Maps").Range("paramTypeList"), 0), 0)
Exit Sub

ElseIf Target.Column = 3 Then
    If Target.Value = "" Then GoTo exitHandler
    Application.EnableEvents = False
    Target.Value = Worksheets("CHLA Maps").Range("F1") _
        .Offset(Application.WorksheetFunction _
        .Match(Target.Value, Worksheets("CHLA Maps").Range("labMethodList"), 0), 0)
    Exit Sub    
ElseIf Target.Column = 4 Then
    If Target.Value = "" Then GoTo exitHandler
    Application.EnableEvents = False
    Target.Value = Worksheets("CHLA Maps").Range("J1") _
        .Offset(Application.WorksheetFunction _
        .Match(Target.Value, Worksheets("CHLA Maps").Range("parameterQCCodeList"), 0), 0)
    Exit Sub
Else
    Exit Sub   
End If
exitHandler:
    Application.EnableEvents = True
    Exit Sub
End Sub

1 个答案:

答案 0 :(得分:0)

您可以在if语句中删除退出子,但逻辑将始终退出。当前的退出子将不允许application.enableevents = true执行,并且事件处理将停止

我似乎无法发表评论,也不认为这对您来说是一个完整的答案。