5

我有一个用于跟踪备份成功的 Excel 工作簿。我们有许多表,第一列中有日期,还有宏来根据日期是否过去进行计算。(宏要么隐藏或显示适当的行。)

这一直工作到昨天。我假设是因为宏正在进行字符串比较,而不是日期比较。(当被视为字符串时,“01/01/2013”​​小于“12/31/2012”。)

是否有一种本地方法来比较 VBA 中的日期,或者我是否需要先将日期转换为“yyyy/mm/dd”(如何做会很好)。

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
4

3 回答 3

14

试试这个cDate功能。

类似于:

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

因此,在您的示例中:

If cDate(cell.Value) >= Date Then

我希望我能正确理解您的问题,并希望这对您有所帮助...

于 2013-01-02T17:06:04.027 回答
5

我知道这与您所要求的有点不同,但这可能会在某天对某人有所帮助。如果日期增加了一个小时(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
    ...
于 2018-02-12T16:34:11.147 回答
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
于 2020-07-17T06:33:08.673 回答