在vba

时间:2016-06-17 19:55:31

标签: vba ms-access

我有一个简单的问题,如何让我的程序理解变量A和变量B之间有一个时间间隔,我不能在那里添加任何进程?如何创建表示A和B之间间隔的变量?

2 个答案:

答案 0 :(得分:0)

是的,所以基本上,我需要声明另外2个变量,这些变量表示进程的起始限制和结束限制的开始,我还声明了第3个变量可以检查上限(假设< 0:55) ,最大约定时间)或下限(=或>> 0)受新入境时间间隔的影响,假设(20:00-30:00),如果其中一个受影响则不添加任何内容,但如果有时间可用(时间没有冲突)然后添加约会。

答案 1 :(得分:0)

你有两个问题。关于在两个值之间创建间隔的第二个问题很简单。

Interval = B – A

以上将导致两个变量之间的差异,如果上述3个变量是日期/时间变量,则结果值将以时间为单位。 (日期类型变量可以包含日期+时间值。)

至于第一个问题,你正在寻找一个基本的碰撞。

在以下情况下发生碰撞:

RequestStartDate <= EndDate 
and 
RequestEndDate >= StartDate 

以上是一个相当简单的查询,但如果发生任何冲突,上面的内容将返回记录。此时,您根本不允许预订或在表中添加行。换句话说,由于我们绝不允许通过碰撞进行预订,因此上述简单查询和逻辑语句将对我们有用。以上内容将找到任何存在的圈数。

应该指出,上述适用于日期,时间,数字或更好的日期/时间值可能适合您的问题。可以合理地假设不仅需要时间冲突,而且还需要基于给定日期的时间冲突(否则会在许多日期发生时间冲突)。如果上述值是没有Date组件部分的Time值,则上述逻辑在EVEN中工作。在Access中,Date变量同时包含日期+时间,如果您正在处理仅时间冲突,则日期部分为零值。如上所述,您不可能在没有给定日期的情况下处理仅限时间的值。

因此,上述简单查询将发现冲突,因此可以使用代码逻辑来防止这种冲突。因此,实现上述目标的样本VBA将是:

dim strWhere                        as string 
dim dtRequeestStartDate      as date 
dim dtRequestEndDate         as date 


dtRequestStartDate = inputbox("Enter start Date") 
dtRequestEndDate = inputbox("Enter end date") 


strWhere="#" & format(dtRequestStartDate,"mm/­dd/yyyy") & "# <= EndDate" & _ 
   " and #" & format(dtRequestEndDate,"mm/dd­/yyyy") & "#  >= StartDate" 


if dcount("*","tableBooking",strW­here) > 0 then
    msgbox "a collision exits, sorry, you can’t book"