行验证的VBA代码

时间:2014-07-29 15:56:12

标签: excel-vba vba excel

附件是我将向员工推出的费用报告。为了减少追逐,员工需要在上半部分输入任何费用的工号和成本代码。

我想要的是,如果员工忽略了输入工号和/或成本代码但是试图在同一行输入费用,则会显示一条消息,这就是“请输入工作”继续之前的数字“和/或”请在继续之前输入成本代码“,具体取决于他们未能完成的方框。我在创建VBA语言方面得到了一些帮助,但它不是很有效,我不确定问题是什么。作业编号的脚本有效,但无论是否包含成本代码,我都会收到错误消息,即员工必须在C列中输入成本代码。

我已经为作业编号和成本代码列设置了一些验证规则:作业编号必须长度为7个字符(我们的作业编号如下:13-7410),成本代码长度必须为4个字符(我们的成本代码如下:9-20)。

这是我到目前为止创建的VBA代码:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Columns("D:K")) Is Nothing Then Exit Sub
Application.EnableEvents = False
If Cells(Target.Row, 1) = "" Then
    MsgBox ("Please enter the Job Number in Column A.")
    Target.ClearContents
    Cells(Target.Row, 1).Select
ElseIf Cells(Target.Row, 2) = "" Then
    MsgBox ("Please enter the Cost Code in Column C.")
    Target.ClearContents
    Cells(Target.Row, 2).Select
End If
Application.EnableEvents = True

End Sub

不幸的是,我无法张贴费用报告的图片......

1 个答案:

答案 0 :(得分:1)

Private Sub Worksheet_Change(ByVal Target As Range)

    Const MSG As String = "Please enter both the Job Number in Column A " & _
                 " and the Cost Code in Column C before adding expenses."
    Dim rw As Range

    If Intersect(Target, Me.Range("D:K")) Is Nothing Then Exit Sub

    Set Target = Target.Cells(1) 'in case user changed>1 cell
    Set rw = Target.EntireRow

    Application.EnableEvents = False

    If rw.Cells(1).Value = "" Then
        MsgBox MSG
        Target.ClearContents
        rw.Cells(1).Select
    ElseIf rw.Cells(3).Value = "" Then
        MsgBox MSG
        Target.ClearContents
        rw.Cells(3).Select
    End If

    Application.EnableEvents = True
End Sub