如果日期大于或等于函数

时间:2018-02-25 12:07:43

标签: vba if-statement

Public DateRng As String

Private Sub DateLookup()

'Dim ColCnt As Integer

'Prompt Date to look for
  DateRng = InputBox("Insert date in format dd/mm/yy", "User date", Format(Now(), "dd/mm/yy"))
  If IsDate(DateRng) Then
    DateRng = Format(CDate(DateRng), "dd/mm/yy")
    ColumnDateCheck
'    MsgBox DateRng
  Else
    MsgBox "Wrong date format"
    Exit Sub
  End If



End Sub

Private Sub ColumnDateCheck()

    For C = 3 To 29
        If Cells(C, 2) >= DateRng Then
            'Function
            Cells(C, 5) = Cells(C, 3) + Cells(C, 4)

        End If
    Next

End Sub

代码在

上执行的数据

Test Sheet

没有执行代码时出错,但功能无法正常工作。它执行一个混乱的功能,后面没有任何模式。无法理解输出。

目标

  1. DateLookup子菜单中的InputBox提示日期
  2. 如果条目有效,请调出ColumnDateCheck Sub
  3. 查看从第3行到第29行在B列中输入的日期。如果日期大于或等于,则添加列C&列E中的D.

2 个答案:

答案 0 :(得分:2)

我不使用美国日期格式(我使用y/m/d),你也没有,因为你是d/m/y而英语/美国标准是m/d/y,所以是问题的一部分(对我们两个人而言)。

无论Excel中的单元格格式化如何,VBA仍然希望以特定方式使用日期。有几种方法可以解决这个问题;我选择了一个简单的方法:让用户输入Excel期望的日期。

所以我添加了一个指定格式的函数(对于你我和你的计算机来说会有所不同)。

问题的另一部分是您需要更好地理解数据类型。基本上,试图将Date存储在String变量中,该变量并不总是按预期工作(就像这次一样)。

InputBox会返回一个字符串,所以你需要转换它,但转换它并仍然将它存储在一个字符串中只是保持字符串。

与语句DateRng = Format(CDate(DateRng), "dd/mm/yy")相同,因为Format总是返回一个字符串(即使它看起来像一个日期),而你的DateRng变量仍然是一个字符串。

无论如何,这个修改过的代码应该可以工作:

Private Sub DateLookup()
    Dim str_DateRng As String
    Dim dateRng As Date
    str_DateRng = InputBox("Enter date in format " & DateFormat, "User date", _
        Format(Now(), DateFormat))
    If IsDate(str_DateRng) Then
        dateRng = CDate(str_DateRng)
        ColumnDateCheck (dateRng)
    Else
        MsgBox "Wrong date format"
        Exit Sub
    End If
End Sub

Private Sub ColumnDateCheck(dateToFind As Date)
    Dim c As Integer
    For c = 3 To 29
        If Cells(c, 2) >= dateToFind Then
            Cells(c, 5) = Cells(c, 3) + Cells(c, 4)
        End If
    Next c
End Sub

Function DateFormat() As String
    Select Case Application.International(xlDateOrder)
        Case 0 : DateFormat = "m/d/yyyy"
        Case 1 : DateFormat = "d/m/yyyy"
        Case 2 : DateFormat = "yyyy/m/d"
    End Select
End Function

答案 1 :(得分:1)

尝试比较这样的日期:

   If Format(Cells(C, 2) ,"yyyy-mm-dd")>= Format(DateRng,"yyyy-mm-dd") Then......etc.