Excel宏,如何确定日期是否已过去?

时间:2013-01-02 17:00:49

标签: excel vba excel-vba

请原谅问题的基本性,但我认为必须有一个简单,天真的解决方案,我找不到。

基本情况是我有一个Excel工作簿,我们将其用作跟踪备份成功率的企业解决方案,因此,我们在第一列中有一些包含日期的工作表,以及一些小的宏根据日期是否过去进行计算。 (主要是对于查看此工作表但不想要一堆空行的经理,因此宏要么隐藏或显示相应的行。)

直到昨天(新年快乐)一直运作良好;我假设因为宏正在进行字符串比较,而不是日期比较。 (01/01/2013在被视为字符串时小于12/31/2012。)

下面是宏,问题基本上是有一种本地方式来比较VBA中的日期,或者我是否需要先将日期从人类日期格式转换为yyyy/mm/dd,然后再做我的逻辑。 (如果我确实需要这样做,基本的方式会很好 - 我尽可能避免使用Excel和VBA,所以就VBA而言,我的编码技能非常有限。)

A2将是我们开始使用此新版电子表格的第一个日期的单元格,而A454将是我为扩展电子表格而烦恼的最后日期,对应于今年年底。

Sub ShowAll()

Dim cell As Range
For Each cell In Range("A2:A454")
cell.EntireRow.Hidden = False
Next

End Sub

Sub RevealPast()

Dim cell As Range
For Each cell In Range("A2:A454")
If cell.Value < Date Then
cell.EntireRow.Hidden = False
End If
Next


End Sub

Sub HideFuture()

Dim cell As Range
For Each cell In Range("A2:A454")
If cell.Value >= Date Then
cell.EntireRow.Hidden = True
End If
Next

End Sub

3 个答案:

答案 0 :(得分:10)

尝试cDate功能。

类似于:

If CDate("02/01/2013") > Date (or Now() if you want today's date) Then
   ...

所以,在你的例子中:

If cDate(cell.Value) >= Date Then

我希望我能正确理解你的问题并希望这有助于......

答案 1 :(得分:3)

我知道这与你提出的问题有点不同,但有一天这可能对某人有所帮助。如果有一个小时添加到日期(2014年3月5日上午8:00:00),并且您想与您的日期进行比较,您可以:

'X是您要比较的日期

x = CDate(x) 'formatting the date using the CDate function

x= Format(x, "MM/DD/YYYY") 'formatting the date by dropping the hour

x= CDate(x) 'formatting the date again 


If x <= Date Then
    ...

答案 2 :(得分:0)

我按照您的回答,不!不行而且不!

在Excel VBA上,这是错误的!您需要将日期格式设置为“ 2020/07/18 09:48:51”以进行比较

因此,首先使用CDate()函数获取Date变量,然后再进行比较。否则它不起作用。

If Format(MyFileDate, "yyyymmdd hhnnss") >= Format(ReportStart, "yyyymmdd hhnnss") And Format(MyFileDate, "yyyymmdd hhnnss") < Format(ReportEnd, "yyyymmdd hhnnss") Then