【问题标题】:VBA Date Comparison not workingVBA日期比较不起作用
【发布时间】:2018-10-27 13:09:03
【问题描述】:

我有一部分代码:

o = Workbooks(repfile).Worksheets(1).Range("b:b").Cells.SpecialCells(xlCellTypeConstants).Count
For k = o To 2 Step -1
dte = CDate(Replace(Cells(k, 8), ".", "/"))
Cells(k, 8) = dte
    If Cells(k, 8) < udate And Cells(k, 8) > udate2 Then
    Rows(k).EntireRow.Delete
    End If
Next

在前面的代码部分,用户指定了他想要获取报告的日期(udate 和 udate2) 例如。我指定我只想查看日期在 09/01/2017 和 09/30/2017 (mm/dd/yyyy) 之间的行,其余行将被删除。 然而这种比较是行不通的。 当我在 IF 行设置断点来检查我看到的变量时:

Cells(k,8)= 11/9/2017 udate= 9/1/2017 udate2= 9/30/2017 

所以根据我的代码,这行应该被删除,但事实并非如此。 我已经尝试了其他一些选项,例如:

Cells(k, 8) < DateValue(udate) And Cells(k, 8) > DateValue(udate2)

Cells(k, 8).value < DateValue(udate) And Cells(k, 8).value > DateValue(udate2)

CDate(Cells(k, 8)) < CDate(udate) And Cells(k, 8) > CDate(udate2)

还有一些,但没有任何效果。

【问题讨论】:

  • 您是否 100% 确定您的 Cells(k,8) 也在 mm/dd/yyyy 中,而不是在 dd/mm/yyyy 中,好像这种情况不应该删除发生。
  • udate 是如何声明的?是DateVariant 还是String
  • @Vityata udate 和 udate2 被声明为日期

标签: excel vba


【解决方案1】:

我认为你的逻辑不正确:

If Cells(k, 8) < udate And Cells(k, 8) > udate2 Then

if #11/9/2017# < #9/1/2017#  And #11/9/2017# > #9/30/2017#

将评估为假。

也许你想要:

If Cells(k, 8) < udate Or Cells(k, 8) > udate2 Then

【讨论】:

  • 是的,你是对的。我从Or开始,但是之前我犯了一些错误,我认为这是“Or”的原因,所以我将其更改为And并且没有回到Or
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多