我目前有 12 份工作簿 - 我们公司的每个地点都有一份。工作簿有多列,每个月的每一天都有一行。地点管理器每天都会填写 2 列,其余的则自动计算。有些“复杂”的用户如果当天没有金额,就会拒绝在第二列中输入零,而是将其留空,从而导致整个工作表出现错误。
A 列中每一天都会有一个值,因此我想在用户单击“保存”时运行一个宏,该宏将检查 A 列中的值。如果有值,则表示这一天已经过去,并且 D 列中应该有一个值(即使它是零)。
总结一下,如果 A 列不为空,则检查 D 列。如果为空,则用零填充。如果不是空,则用户输入了一个值,因此我们可以继续。当它到达 A 列中为空的单元格时,只需退出整个过程。
我已经浏览互联网几天试图弄清楚这一点,到目前为止我得到的结果是:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim curCell As Range
'Labor Flow Sheet'.Select
For Each curCell in Range(A1:D31)
If curCell.Value = "" Then
<???????>
End If
Next curCell
End Sub
我已将范围设置为整个区域,但我不确定如何知道循环只会检查 A 列。范围应该是 (A1:A31) 吗?那么我该如何告诉它在同一行中跳过到 D 列来检查该值?
我非常感谢大家的帮助。我希望能够为这个社区提供一些帮助,并尽可能回答其他问题!
再次感谢
答案1
我没有机会测试这个,但它应该可以工作,你所要做的就是添加你自己的工作簿和工作表名称。
Sub test()
Dim Ws As Worksheet
Dim X As Long
Application.ScreenUpdating = False
Set Ws = Workbooks("").Sheets("Sheet1") ' add your workbook here
For X = 1 To Ws.Range("A" & Rows.Count).End(xlUp).Row
If Not Ws.Cells(X, 1).Value = vbNullString Then
If Ws.Cells(X, 4).Value = vbNullString Then
Ws.Cells(X, 4).Value = "0"
End If
ElseIf Ws.Cells(X, 1) = vbNullString Then
Exit Sub
End If
Next X
Application.ScreenUpdating = True
End Sub
根据您的工作簿的大小,我认为值得禁用屏幕更新,但这不是必要的,而且使用 VbNullString 比“”更好,因为它不占用内存。
希望能帮助到你,
汤姆