周五提醒我,我周末应该看到的

时间:2009-10-22 20:47:29

标签: ms-access calendar ms-access-2007 scheduled-tasks dashboard

我在各种监禁中设置了以下查询,以提醒我在确认的到期日期前0,7,30,60和90天签订合同到期日。我计算通知日期的方法并没有给我任何灵活性。例如,假设我有30份合同到期12/5,周六我的办公室没有开放。我将错过合同到期当天和7天后的通知。

SELECT qryAllSold.SoldID, qryAllSold.CompanyName, qryAllSold.Product, qryAllSold.Description, qryAllSold.Quantity, qryAllSold.Price, qryAllSold.ConfirmedExpires, qryAllSold.Note
FROM qryAllSold
WHERE (((qryAllSold.ConfirmedExpires)=DateAdd("d",0,Int(Now()))) AND ((qryAllSold.RenewedToID) Is Null) AND ((qryAllSold.NonOpportunity)=No));

这些查询中的每一个都将显示在一个“仪表板”表单上,以用作每日任务列表。如果我可以让表单代表一个日期,并且单击箭头一次向前或向后移动一天,那将是很好的,但我不知道Access是否具有该功能。

如果这不起作用,我可以通过其他方式确保我不会错过这些到期的通知吗?

2 个答案:

答案 0 :(得分:2)

[编辑]如果您不是程序员,这里是替代解决方案

为什么不在查询中使用格式功能,例如

Format([ConfirmedExpires],"ww",2,1)

“ww” - 指定周数,2指定星期一为一周的第一天,1表示第1周包含1月1日

现在很容易在几周内进行日期计算,例如合同将在未来4周内到期:

Format([ConfirmedExpires],"ww",2,1)-Format(Now(),"ww",2,1))>4

合同将在未来4周以及未来5周内到期

Format([ConfirmedExpires],"ww",2,1)-Format(Now(),"ww",2,1))>4 -
Format([ConfirmedExpires],"ww",2,1)-Format(Now(),"ww",2,1)),=5

这有帮助吗?


为什么不直接使用 DateAdd 等功能的工作日功能?

而不是计算提前30个日历日,您可以计算25个日历或任何其他工作日数。

下面的代码显示了一个消息框,但您可以在消息框后面的SQL查询中同样使用该函数。

Sub TestWeekDay()
    Dim FirstDate As Date    ' Declare variables.
    Dim IntervalType As String
    Dim Number As Integer
    Dim Msg

    IntervalType = "ww"    ' "ww" specifies weeks as interval.
    FirstDate = InputBox("Enter a date")
    Number = InputBox("Enter number of weekdays to add")
    Msg = "New date: " & DateAdd(IntervalType, Number, FirstDate)
    MsgBox Msg
End Sub

答案 1 :(得分:1)

也许有点复杂:

IIf(Weekday(DateAdd("d", 0, Date())) = 7, DateAdd("d", 0, Date()) + 2, IIf(Weekday(DateAdd("d", 0, Date())) = 1, DateAdd("d", 0, Date()) + 1, DateAdd("d", 0, Date())))

这可以放在你的where语句中,如下所示:

SELECT q.SoldID, q.CompanyName, q.Product, 
       q.Description, q.Quantity, q.Price, 
       q.ConfirmedExpires, q.Note
FROM qryAllSold AS q
WHERE q.ConfirmedExpires=IIf(Weekday(DateAdd("d", 0, Date())) = 7, DateAdd("d", 0, Date()) + 2, IIf(Weekday(DateAdd("d", 0, Date())) = 1, DateAdd("d", 0, Date()) + 1, DateAdd("d", 0, Date())))
AND q.RenewedToID Is Null AND q.NonOpportunity=No

请注意,我使用了qryAllSold的别名q,因为这样可以更轻松地读取查询:     来自qryAllSold AS q

最好使用False而不是No。

如果您愿意,您应该能够使用参数:

PARAMETERS NoDays Short;
SELECT q.SoldID, q.CompanyName, q.Product, 
       q.Description, q.Quantity, q.Price, 
       q.ConfirmedExpires, q.Note
FROM qryAllSold AS q
WHERE q.ConfirmedExpires=IIf(Weekday(DateAdd("d",[NoDays],Date()))=7,DateAdd("d",[NoDays],Date())+2,IIf(Weekday(DateAdd("d",[NoDays],Date()))=1,DateAdd("d",[NoDays],Date())+1,DateAdd("d",[NoDays],Date())))
AND q.RenewedToID Is Null AND q.NonOpportunity=No

该参数允许您选择若干天。如果这涉及表格上的字段或在VBA中设置,那就更好了。