下拉菜单中遇到错误时工作表更改事件触发

时间:2019-02-04 17:22:01

标签: excel vba

我有一个下拉数据验证,它将选定选项的值保存到另一个单元格位置。这是使用以下方法完成的:

Private Sub Worksheet_Change(ByVal Target as range) 

,当我尝试向其中输入字符串时,将弹出一条错误消息,这是预料之中的,因为除非在列表中,否则我们无法在下拉菜单中输入任何内容。但是,每当我尝试在错误消息框中单击“重试或取消”时,Change事件都会再次触发。

我已经有

Application.EnableEvents = False

但仍然无法正常工作。你能帮我么?如果由于下拉菜单而遇到错误消息,我不想再次触发Change事件。

这是代码和示例场景:

Private Sub Worksheet_Change(ByVal Target As Range)
   Application.EnableEvents = False
   Cells(1, 2) = Target.Value
   Application.EnableEvents = True
   Debug.Print Cells(1, 2).Value
End Sub

Cell(1,1)=包含(A,B,C)的下拉列表

方案1: 我将从列表中选择A,不会遇到任何错误。

Debug.print:

  

A

方案2: 我将在下拉列表中输入字符'W',将会遇到错误。

错误:

  

该值与单元格中定义的数据验证限制不匹配。

Debug.Print:

  

A A A

如您所见,更改事件在方案1之后再次触发两次。

谢谢!

J

1 个答案:

答案 0 :(得分:0)

如果工作表中的任何单元格发生更改,则允许触发change事件。您不需要启用事件限制,只需指定目标...

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address = "$A$1" Then
      If Target.Value = "A" Or Target.Value = "B" Or Target.Value = "C" Then
         Cells(1, 2) = Target.Value
      End If
   End if
End Sub