我在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
答案 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中的选项,宏就会自动运行吗?