一旦进入,冻结日期?

时间:2015-11-04 15:23:28

标签: google-apps-script google-sheets timestamp

我使用工作表进行项目规划,其中有一个名为" Status"的列,我可以选择"完成"或"打开"从下拉菜单中。在另一个单元格中,我输入了我的ECD(预计完成日期)。

我想将任务的状态设置为"完成"另一个名为ACD的单元格(实际完成日期)应显示当前日期并在此之后冻结单元格。使用TODAY或NOW功能每天都会改变日期。

是否有适合我的公式或脚本?

3 个答案:

答案 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