Excel 将日期与列表进行比较&;返回列表中的下一个日期
我带着另一个回来了,我不知道该怎么办。如前所述,我是一个VBA程序员初学者,所以很多事情对我来说并不明显 无论如何,我想做的是:Excel 将日期与列表进行比较&;返回列表中的下一个日期,excel,vba,date,comparison,Excel,Vba,Date,Comparison,我带着另一个回来了,我不知道该怎么办。如前所述,我是一个VBA程序员初学者,所以很多事情对我来说并不明显 无论如何,我想做的是: 让用户从下拉单元格中选择付款组号码(完成) 让用户以DD/MM/YYYY格式插入终止日期。如果未选择付款组,则MsgBox出现错误(完成) 如果一切正常,则将终止日期与另一个工作表数据表中该薪资组对应的日期进行比较。返回作为MsgBox输入的终止日期之后的下一个截止日期 到目前为止,我有以下代码: 较大工作表事件选择事件的一部分 ElseIf Not Inters
- 让用户从下拉单元格中选择付款组号码(完成)
- 让用户以DD/MM/YYYY格式插入终止日期。如果未选择付款组,则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
截止日期在称为“截止矩阵”的单独表格上,格式为第一行的薪资组编号,从第二行开始按时间顺序排列日期。箱子里的MsgBox是用来确保它能正常工作的。到目前为止,它是这样做的。假设您有一个命名范围
终止日期
,并且表格“截止矩阵”中的日期按升序排列,下面的函数将为您生成msgbox,其中下一个日期与放入范围(“终止日期”)中的日期相比较。
在同一模块中插入此函数,并将以前的行MsgBox“118”
和MsgBox“118”
更改为Call Next\u Date
。或者更好的是,在插入功能代码后,只需删除您的这一部分:
Select Case Range("PayGroupRange")
Case 118
MsgBox "118"
Case 113
MsgBox "113"
End Select
用这个代替:
给下一个约会打电话
谢谢你的帮助。这一选择似乎比按我的方式逐案处理更容易。我已经稍微调整了它,以处理我的范围名称等,但我认为我现在需要处理日期的格式。我在这一行得到了一个不匹配的错误:如果cell.Value>Range(“LastDayWorkedRange”).Value,那么它与日期是DD/MM/YYYY格式有关吗?我想是这样。使用Ctrl+;(键盘控件加分号)在工作簿中的任何单元格上。您将获得适用于您的操作系统版本的日期格式。因此,您需要更改将日期写入此Excel的方式。或者你真的需要你定义的格式吗?不管我怎么想。我必须将.Cells(1,1)放在.Value之前,因为范围覆盖多个水平单元格。我想它会工作多一点调整,因为我不小心删除了一些线。好吧。很乐意帮忙。你能把这个答案标记为最适合你的情况吗?
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