根据两个日期之间的总时间隐藏行



只有当生效日期和结束日期之间的差异大于6个月时,我才希望显示3行。我知道如何隐藏行以及datediff是如何工作的,但不知道如何将它们组合在一起。我还需要代码在输入日期后立即运行。目前,它只在我为子选择"运行"时运行

这是我目前拥有的代码,它可以工作,但一旦我运行宏,它就会消失。。。。我需要它立即发生一旦日期输入

当前宏,但仅在"运行"时有效

Sub Priority()
If Range("K68") > DateSerial(Year(Range("H68")), Month(Range("H68")) + 6, Day(Range("H68"))+1) Then
Worksheets("Sheet1").Range("72:74").EntireRow.Hidden = False
Else
Worksheets("Sheet1").Range("72:74").EntireRow.Hidden = True
End If
If Range("K68") > DateSerial(Year(Range("H68")), Month(Range("H68")) + 6, Day(Range("H68"))+1) Then
Worksheets("Sheet1").Range("75:76").EntireRow.Hidden = True
Else
Worksheets("Sheet1").Range("75:76").EntireRow.Hidden = False
End If
End Sub

由于您除了希望将DateDiff()Range.Hidden结合在一起之外,没有提供更多信息,因此我将为您举一个例子。

If DateDiff("m", Cells(1, 1), Cells(1, 2)) >= 6 Then
Rows(2).Hidden = False
Rows(3).Hidden = False
Rows(4).Hidden = False
Else
Rows(2).Hidden = True
Rows(3).Hidden = True
Rows(4).Hidden = True
End If

如果DateDiff()为第一行和前两列中的日期返回大于或等于6的值,则这将隐藏行23。如果该值较小,则会使它们可见。当然,您可以根据需要轻松地编辑列和行的值。

Cells(1, 1)将返回第一行和第一列中单元格的值(在您的情况下是日期(,Cells(1, 2)将返回第一排和第二列。

还请注意,如果第一个参数是"m",并且月份的差值是6,则无论在哪个月的哪一天,DateDiff()都将返回6。如果你想接近6个月,我建议你使用"d"几天,并将条件设置为>= 180或其他更符合你需求的条件。

最新更新