将日期与列表进行比较&返回列表中的下一个日期

时间:2015-03-14 16:01:31

标签: excel vba date comparison

我又回来了另一个我不太确定该怎么办的人。如前所述,我是初学VBA程序员,所以很多事情对我来说并不明显。

无论如何,我要做的是:

  • 让用户从下拉单元格中选择一个工资组号码(完成)

  • 让用户以DD / MM / YYYY格式插入终止日期。如果未选择paygroup,则MsgBox出现错误(完成)

  • 如果一切正确,则将终止日期与另一个工作表数据表中与该薪资组对应的日期进行比较。在作为MsgBox输入的终止日期之后返回下一个截止日期。

到目前为止,我有以下代码:

更大工作表事件选择事件的一部分

ElseIf Not Intersect(Target, Range("LastDayWorkedRange")) Is Nothing Then
       Call Cutoff2015
End If

哪个叫这个子:

Sub Cutoff2015()

'If Paygroup has not been selected when entering termination date then error message and enable events
If Range("PayGroupRange") = "Please Select" Then
        MsgBox "Error: Please select Paygroup"
        Application.EnableEvents = True

    'If paygroup is selected then
    Else: Select Case Range("PayGroupRange")
        Case 118
        MsgBox "118"

        Case 113
        MsgBox "113"

    End Select

End If

End Sub

截止日期位于名为“Cuttoff Matrix”的单独工作表上,并使用第一行的工资组编号进行格式化,从第二行开始是按时间顺序排列的日期。案件中的MsgBox被放入以确保其有效。到目前为止,确实如此。

1 个答案:

答案 0 :(得分:0)

假设您在表单中有一个命名范围TerminationDate和日期" Cuttoff Matrix"按升序排列,以下函数会产生msgbox,其下一个日期与放入Range("TerminationDate")的日期相比。

Private Function Next_Date()
Dim rng As Range
Dim rngFoundPayGroup As Range
Dim cell As Range

'setting the range in Cutoff Matrix from A1 to the last not empty cell to right
Set rng = ThisWorkbook.Sheets("Cuttoff Matrix").Range("A1")
Set rng = Range(rng, rng.End(xlToRight))

'finding identified PayGroup in the previously set range
Set rngFoundPayGroup = rng.Find(Range("PayGroupRange"), , xlValues, xlWhole)
'Looking downwards for the date bigger than termination date
For Each cell In Range(rngFoundPayGroup, rngFoundPayGroup.End(xlDown))
    If cell.Value > Range("TerminationDate").Value Then
        MsgBox cell.Value
        Exit For
    End If
    'If no date which is bigger, this msgbox appears
    If cell.Address = rngFoundPayGroup.End(xlDown).Address Then MsgBox "Next date not found"
Next

Set rngFoundPayGroup = Nothing
Set rng = Nothing
End Function

将此功能插入同一模块,并将之前的行MsgBox "118"MsgBox "118"更改为Call Next_Date。或者甚至更好,在插入功能代码后,只需删除你的这部分:

Select Case Range("PayGroupRange")
    Case 118
    MsgBox "118"
    Case 113
    MsgBox "113"
End Select

而是使用它:Call Next_Date