从下拉列表中选择应显示结果

时间:2016-01-09 17:42:38

标签: vba excel-vba excel

我在A1中选择了“汽车”和“自行车”的下拉菜单,一旦我选择“汽车”或“自行车”,它应该显示来自sheet5的各个汽车和自行车的品牌列表。

一旦我从下拉列表中选择“汽车”或“自行车”,我就必须运行一个宏。

但是一旦我从下拉列表中选择任何一个,结果应显示而不是运行宏模块。

我在模块

中使用了以下内容
Sub validation()

    Dim MyList(2) As String
    MyList(0) = "Cars"
    MyList(1) = "Bikes"
    MyList(2) = ""

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

    If Range("A1") = "Cars"
        Sheets("Sheet5").Range("Carsbrand").Copy Destination:=Sheets("Sheet1").Range("B9:E17")
        'the above line copies car brand names from sheet5
    ElseIf Range("A1") = "Bikes" Then
        Sheets("Sheet5").Range("Bikesbrand").Copy Destination:=Sheets("Sheet1").Range("B9:E11")
        'the above line copies car brand names from sheet5
    End If
End Sub

2 个答案:

答案 0 :(得分:0)

您的代码在单元格 A1 中设置数据验证,但它实际上并未在 A1 中放置任何内容,因此两个列表都不会被复制。

您需要另一个事件宏来监控对单元格 A1 的更改并执行复制。将其放在工作表代码区

Private Sub Worksheet_Change(ByVal Target As Range)
   Dim A1 As Range
   Set A1 = Range("A1")
   If Intersect(A1, Target) Is Nothing Then Exit Sub

   Application.EnableEvents = False
      If Range("A1") = "Cars" Then
             Sheets("Sheet5").Range("Carsbrand").Copy Destination:=Sheets("Sheet1").Range("B9:E17")
      ElseIf Range("A1") = "Bikes" Then
          Sheets("Sheet5").Range("Bikesbrand").Copy Destination:=Sheets("Sheet1").Range("B9:E11")
      End If
   Application.EnableEvents = True
End Sub

修改#1:

在尝试粘贴之前,此版本将避免出现警告消息并清理目标区域:

Private Sub Worksheet_Change(ByVal Target As Range)
   Dim A1 As Range
   Set A1 = Range("A1")
   If Intersect(A1, Target) Is Nothing Then Exit Sub

   Application.EnableEvents = False
      Sheets("Sheet1").Range("B9:E17").Clear
      If Range("A1") = "Cars" Then
             Sheets("Sheet5").Range("Carsbrand").Copy Destination:=Sheets("Sheet1").Range("B9:E17")
      ElseIf Range("A1") = "Bikes" Then
          Sheets("Sheet5").Range("Bikesbrand").Copy Destination:=Sheets("Sheet1").Range("B9:E11")
      End If
   Application.EnableEvents = True
End Sub

答案 1 :(得分:-2)

如果我理解正确的话,您希望只要选择了Cell A1中的选项,宏就会自动运行吗?