Excel Mac VBA 循环遍历单元格并重置一些值

Excel Mac VBA 循环遍历单元格并重置一些值

我目前有 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 比“”更好,因为它不占用内存。

希望能帮助到你,

汤姆

相关内容