验证规则Excel VBA

时间:2010-09-21 21:08:01

标签: excel-vba vba excel

我在一个名为A1和A2的电子表格中有两列。输入的数据只能是“Y”或“N”。但是,A1和A2不能为同一记录具有相同的条目。例如,如果记录#3中A1的值为“Y”,则记录#3中的A2值必须为“N”。并且不能是“Y”。另外,如果记录#3中的A1是“N”,则A2必须是“Y”。换句话说,A1和A2在同一记录中不能有相同的条目。 是否有意义? 什么是最好的方法呢?使用VBA?或使用工作表控件?

到目前为止,我在Submit_click子中写了一个简单的条件: 如果Range(A1).value = Range(A2).value则 MSGBOX( “.....”)

但这与我在Worksheet_beforeClose中的save函数冲突。当用户在没有提交的情况下关闭工作表时,会出现一条消息,警告用户他/她忘记提交。但我面临的当前问题是,如果用户为A1和A2输入“Y”,然后他/她在提交之前关闭了电子表格,则会向用户显示警告消息(您要提交吗?)一旦用户响应“是”,则显示另一个验证消息,因为A1和A2具有相同的值“Y”。然后程序刚刚关闭而没有提交。

请指导我,

1 个答案:

答案 0 :(得分:1)

将它放在Worksheet_Change事件中。它将在编辑单元格后更正值。

Const c1pos = 1
Const c2pos = 2

Application.EnableEvents = False

Select Case Target.Column
    Case c1pos
        If UCase(Target.Value) = "Y" Then
            ActiveSheet.Cells(Target.Row, c1pos) = "Y"
            ActiveSheet.Cells(Target.Row, c2pos) = "N"
        Else
            ActiveSheet.Cells(Target.Row, c1pos) = "N"
            ActiveSheet.Cells(Target.Row, c2pos) = "Y"
        End If
    Case c2pos
        If UCase(Target.Value) = "Y" Then
            ActiveSheet.Cells(Target.Row, c1pos) = "N"
            ActiveSheet.Cells(Target.Row, c2pos) = "Y"
        Else
            ActiveSheet.Cells(Target.Row, c1pos) = "Y"
            ActiveSheet.Cells(Target.Row, c2pos) = "N"
        End If
End Select

Application.EnableEvents = True