我使用工作表进行项目规划,其中有一个名为" Status"的列,我可以选择"完成"或"打开"从下拉菜单中。在另一个单元格中,我输入了我的ECD(预计完成日期)。
我想将任务的状态设置为"完成"另一个名为ACD的单元格(实际完成日期)应显示当前日期并在此之后冻结单元格。使用TODAY或NOW功能每天都会改变日期。
是否有适合我的公式或脚本?
答案 0 :(得分:0)
我爱你COM增值税!
但不要成为顽皮的男孩,不要分享你的代码......
将列A保持为空,在表单提交或对行列的编辑时,A将显示当前日期并且不会更改: - )
use Session;
use Illuminate\Support\Facades\Session;
答案 1 :(得分:-1)
假设“完成”位于单元格A1
中,日期/时间位于B1
=IF(A1="Done",IF(LEN(B1)>0,B1,NOW()),"")
但是,您需要启用迭代
如果您删除“完成”,则该单元格将再次为空
答案 2 :(得分:-1)
您正在寻找的是宏,而不是公式。此解决方案假设您的ECD列为“A”(第1列),那么您的STATUS列为“B”列(第2列)
步骤1)按Alt + F11,这将打开VBA中的代码编辑器。
步骤2)将下面的代码复制并粘贴到公式所在的“工作表”中。
步骤3)将工作簿另存为启用宏的电子表格。 (XLSM)。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
If (Target.Columns.Count = 1 And Target.Column = 2 And Target.Rows.Count = 1) Then
'Check every row, currently this will get executed once
For Each cell In Target.Cells
'Make sure the value is set to 'done'
If (UCASE(cell.Value) = "DONE") Then
'Using the current modified row, set column 1 to Today
'Note: Now() is the same as Today in VBA
Target.Worksheet.Cells(cell.row, 1).Value = Now()
End If
Next cell
End If
End Sub
注意:只有一个单元格设置为“完成”时,才会执行此宏。您可以通过删除FIRST'if'语句的'Target.Rows.Count = 1'部分来更改它以在多个单元格上工作。如果您通过单击并将“完成”值拖动到多个单元格来“扩展”,则可能会发生这种情况。
注意2:如果要分配日期一次,并防止日期不断变化,即使您再次将字段修改为“完成”。将最后一个'if'语句更改为以下内容:
If (UCASE(cell.Value) = "DONE" And Target.Worksheet.Cells(cell.row, 1).Value = "") Then