在特定日期过后自动删除某个值

在特定日期过后自动删除某个值

我正在为自己和同事制作一份工作登记表。在我创建的这个工作簿中,我们有一定数量的空闲天数可以使用,但我们需要在某个日期之前使用这些空闲天数。如果我们不使用这些空闲天数,它们就会消失。所以我需要创建一个代码,如果在截止日期之前没有用完这些空闲天数,它将自动删除这些空闲天数。但这也需要在打开文件和多张工作表时发生,例如:

我有一个单元格 A1,其中显示 240:00 小时,我想使用第二个单元格 A2,其中显示一年零 180 天后的日期,并且如果单元格 A1 中仍有值,它将更改为 0:00。

我需要它在不同的单元格和不同的时间上工作,因为有些空闲日会在一年零 180 天后过去,有些空闲日会在五年后过去。

我知道如何在 VBA 中输入代码并创建宏,但我不知道如何为 VBA 编写代码,只能稍微调整一下

答案1

我希望你意识到单元格(以及它们包含的公式和函数)不能调整其他细胞。细胞可以展示误导性价值观;例如,你可以存储在工作表中的非零值,但显示为“0”或空白。VBA修改单元格。

根据您对情况的描述,我假设您实际上想要删除“空闲天数”的值,因此您需要 VBA。

您说您希望它同时在多个单元格上工作,但您没有说明如何指定它们。我认为在 VBA 源代码中硬编码单元格列表是可以的。如果您需要其他方法,请编辑您的问题以指定它。

创建以下 VBA 例程。使用如何在 MS Office 中添加 VBA?以供参考。更改cell_list值以列出包含“空闲天数”值的单元格。

Sub auto_delete()
    Dim cell_list, this_cell As String
    Dim i As Integer
    Dim today_date As Date

    today_date = Date
    cell_list = "A1,B1"
    For i = 0 To UBound(Split(cell_list, ","))
        this_cell = Split(cell_list, ",")(i)
        On Error Resume Next
        If Range(this_cell) Is Nothing Then
            MsgBox this_cell + " is not a valid cell designation."
            Exit For
        End If
        On Error GoTo 0
        If Range(this_cell).Count <> 1 Then
            MsgBox this_cell + " appears to be a range.  Please specify individual cells only."
            Exit For
        End If
        If Range(this_cell).Cells(2, 1).Value < today_date Then
            ' in the past
            Range(this_cell).Cells(1, 1).Value = ""
        End If
    Next
End Sub

笔记:

  • 设置cell_list为逗号分隔的字符串是指定值列表的一种有点笨拙的方法。但显然我的 VBA 版本已经过时了;我尝试了更简洁(更现代?)的技术,但没有奏效。
  • Split(cell_list, ",")它的作用正如它看起来的那样 — — 将其拆分cell_list成组成词,使用逗号作为分隔符,并创建一个值数组。
  • UBound(Split(cell_list, ","))给出数组中的最高(上界)索引。(这比值的数量少一,因为索引从 0 开始。)
  • For i = 0 To (the_above) 循环遍历数组中的值。
  • Split(cell_list, ",")(i) 索引到数组并返回i第值。
  • 我需要使用On Error Resume NextOn Error GoTo 0 测试无效的单元格引用;我不确定为什么。
  • Range(this_cell).Cells(2, 1).Value 指的是当前单元格下方的单元格。例如,如果 this_cellA1,则这指的是 A2,其中到期日期是。

我相信其余部分是不言而喻的。

前:

电子表格:A1 有 16 个,A2 有 2021 年 7 月 1 日,B1 有 42 个,B2 有 2021 年 11 月 1 日

后:

与上面相同,只是 A1 为空白。

手动或自动调用上述例程;以更适合您的需要为准。

相关内容