附件是我将向员工推出的费用报告。为了减少追逐,员工需要在上半部分输入任何费用的工号和成本代码。
我想要的是,如果员工忽略了输入工号和/或成本代码但是试图在同一行输入费用,则会显示一条消息,这就是“请输入工作”继续之前的数字“和/或”请在继续之前输入成本代码“,具体取决于他们未能完成的方框。我在创建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
不幸的是,我无法张贴费用报告的图片......
答案 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