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

时间:2017-04-29 05:34:03

标签: excel excel-vba for-loop event-handling vba

当我尝试为工作簿更改事件中的每个循环运行两个时,只有第二个循环执行,并且msgbox窗口可重复弹出,而不是关闭。我怎样才能找到一个有利的解决方案呢?请参考以下代码。

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

1 个答案:

答案 0 :(得分:1)

我的理解是,您正试图监控指定范围的单元格内容。[/ p>

因此:

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

b)您需要检查哪个单元格已更改,如果它在指定范围内,则验证其内容。

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

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