我在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发布于 2016-01-10 01:59:52
您的代码在cell A1中设置了数据验证,但它实际上并没有在A1中放置任何内容,因此这两个列表都不会被复制。
您需要另一个事件宏来监视对cell 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 SubEDIT#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发布于 2016-01-10 02:00:58
如果我没理解错的话,您希望在单元格A1中选择了一个选项后,宏就会自动运行吗?
https://stackoverflow.com/questions/34696774
复制相似问题