如果使用VBA找不到特定日期,如何找到下一个日期

时间:2017-07-28 13:29:17

标签: excel vba excel-vba date

我需要帮助。我有Sheet 1和Sheet2。在Sheet1 / 2中,我在B栏中有日期,两个工作日期都不相同,但当我推荐选择打印日期时,我希望VBA选择最近的日期,如果它找不到我的约会。例如: - 如果我要求VBA从日期12-Aug-17打印我可以在sheet1中选择,但在Sheet 2中没有8月12日,所以它必须选择13或11并打印。 在我的编码中,如果它在同一天,它将打印两张纸。但如果失败则会显示错误。

请参阅下面的代码。

Sub nextdate()

    Dim Sh As Worksheet
    Set sh2 = Sheets("Sheet2")
    Set sh3 = Sheets("Sheet3")
    Dim i, j2, j3, sh2EndCell, sh3EndCell As Integer
    Dim W1Enddate As Date

    W1Enddate = Application.InputBox("Enter the End Date")
    ddate = Range("B" & Rows.Count).End(xlUp).Row

    sh2EndCell = sh2.Range("b" & Rows.Count).End(xlUp).Row
    sh3EndCell = sh3.Range("b" & Rows.Count).End(xlUp).Row
    For i = 2 To sh2EndCell
    If sh2.Range("b" & i).Value = W1Enddate Then
        j2 = i
        Exit For
    End If

1 个答案:

答案 0 :(得分:0)

不确定我的问题描述是否正确,但请尝试以下方法:

...
...
sh2EndCell = sh2.Range("b" & Rows.Count).End(xlUp).Row
Dim MinDateDiff As Long
Dim ClosestDate

MinDateDiff = 1000000

For i = 2 To sh2EndCell
    If Abs(DateDiff("d", sh2.Range("b" & i).Value, W1Enddate)) < MinDateDiff Then
        MinDateDiff = Abs(DateDiff("d", sh2.Range("b" & i).Value, W1Enddate))
        ClosestDate = sh2.Range("b" & i).Value
        j2 = i
    End If
Next