两个for工作簿中的每个循环语句更改事件

当我尝试在工作簿更改事件中为每个循环运行两个循环时,只有第二个循环执行,还有msgbox窗口可重复popup,而不是closures。 我怎样才能find一个有利的解决办法呢? 请参考下面的代码。

Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set a = Worksheets("first").Range("q2:q417") ' first foreachloop ------------------- For Each b In a If b.Value <> "" And Not IsDate(b) Then b.ClearContents MsgBox ("please enter valid date") End If Next b 'second foreach loop -------------------- Set c = Worksheets("first").Range("s2:s417") For Each C In a If C.Value <> "A" Or _ C.Value <> "B" Or _ C.Value <> "EF" Or _ C.Value <> "CE" Then C.ClearContents MsgBox ("PLEASE ENTER VALID STATUS") End If Next C End Sub 

我的理解是,你正试图监视指定范围的单元格内容。

因此:

a)您需要将Worksheet_SelectionChange事件更改为Worksheet_Change

b)您需要检查哪个单元格发生了变化,如果在指定的范围内,请validation其内容。

将下面的代码放在“第一个”表单后面的模块中。

 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim a As Range Set a = Range("q2:q417") If Not Intersect(Target, a) Is Nothing Then With Target If Not IsEmpty(.Value) And Not IsDate(.Value) Then .ClearContents MsgBox "please enter valid date" End If End With End If Dim b As Range Set b = Range("s2:s417") If Not Intersect(Target, b) Is Nothing Then With Target If Not IsEmpty(.Value) Then If .Value <> "A" And _ .Value <> "B" And _ .Value <> "EF" And _ .Value <> "CE" Then .ClearContents MsgBox "PLEASE ENTER VALID STATUS" End If End If End With End If End Sub