在Excel中复制并粘贴今天的日期

时间:2018-01-29 17:55:25

标签: excel vba excel-vba

我目前正在尝试创建一个函数,仅当与其相邻的单元格包含文本Open时,才会自动填充单元格中的当前日期。

同样,如果状态为Closed,我也希望函数执行相同的操作。

此代码的主要挑战是我不希望使用=TODAY()=NOW()等函数更改日期,而是希望这些日期在填充后永久保留。

这是我希望能够使用此功能的表的图像。

enter image description here

就代码而言,这是我能够提出的建议:

Function add_todays_date() 

    If Sheets("Sheet2").Range("C5") = "Open" Then 
        Sheets("Sheet3").Range("G4").Copy 
        ActiveWorkbook.Sheets("Sheet2").Range("D5").PasteSpecial Paste:=xlValues

2 个答案:

答案 0 :(得分:1)

您可以结合使用IsEmpty测试,以避免覆盖已查看和填充的单元格。

证明原则:

Option Explicit

Sub test()

    With ActiveSheet

        If IsEmpty(.Cells(1, 2)) And .Cells(1, 1) = "Open" Then

            .Cells(1, 2) = Format(Now(), "dd/mm/yyyy")

        End If

    End With

End Sub

或者在循环结构中:

Option Explicit

Sub test()

    Dim currCell As Range

    For Each currCell In ActiveSheet.Range("B1:B10") 'Adjust as required

        If IsEmpty(currCell) And currCell.Offset(0, -1) = "Open" Then

            currCell = Format(Now(), "dd/mm/yyyy")

        End If

    Next currCell

End Sub

答案 1 :(得分:1)

我不认为你想要一个函数,它们像Excel工作表函数一样工作,它们可能会在你下次打开工作簿或刷新工作表时更新。

    Option Explicit

    Public Function add_todays_date()

    Dim selected_range As Range
    Set selected_range = Selection

    With selected_range.Offset(0, -1)

        If .Value = "Open" Or .Value = "Closed" Then
            add_todays_date = Format(Now, "dd/mm/yy")
        End If

    End With


    End Function

@Qharr回答是我要做的,你甚至可以创建一个快捷方式来执行子程序比输入函数更快..