Excel Mac VBA Loop Through Cells并重置一些值


2

我目前有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列检查那个值?

我真的很感激任何人的帮助。我希望能够在这个社区提供一些帮助,尽可能地回答其他问题!

再次感谢

Answers:


1

我没有机会测试这个,但它应该工作所有你将要做的是添加自己的工作簿&amp;工作表名称。

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优于“”,因为它不占用内存。

希望能帮助到你,

汤姆


非常感谢汤姆!这就是我需要的方向!你能告诉我如何让它直到第5行才开始吗?我在行1-4中有一些标题信息,我想绕过它。再次感谢!
Dru Darby

没问题,如果你在第10行将X = 1更改为X = 5,这将在第5行开始循环。
Tom D
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.