请原谅问题的基本性,但我认为必须有一个简单,天真的解决方案,我找不到。
基本情况是我有一个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
答案 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