【问题标题】:Copy and Paste Today's Date in Excel在 Excel 中复制和粘贴今天的日期
【发布时间】:2018-07-08 12:02:42
【问题描述】:

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

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

此代码的主要挑战是我不希望通过使用 =TODAY()=NOW() 之类的函数来更改日期,bht 相反,我希望这些日期在填充后是永久的。

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

在代码方面,这是我能够收集到的:

Function add_todays_date() 

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

【问题讨论】:

  • 您可以执行 Cells(1, 1) = Format(Now(), "dd/mm/yyyy") 之类的操作,但如果您运行代码,它将被当前日期覆盖。如果您希望它是永久性的,请先对单元格进行 Isempty 测试。

标签: vba excel


【解决方案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

【讨论】:

  • 很好用!我还有一个快速跟进的问题,有没有办法让这个自动填充而不必每次都运行子?
  • 是的,你有很多选择,看看这个例子link
  • 例如,您可以将其与工作表更改事件联系起来。您需要确定合适的触发器是什么,这也可能取决于您希望添加日期的频率。
【解决方案2】:

我认为您不需要为此使用函数,它们的工作方式类似于 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 回答是我会做的,你甚至可以创建一个快捷方式来执行子例程,而不是键入一个函数。..

【讨论】:

  • 感谢您的指出!我忘了添加关于 recalc 和 sub 的评论。
猜你喜欢
  • 2013-11-03
  • 1970-01-01
  • 2022-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
  • 2017-01-20
相关资源
最近更新 更多