我已经为我的问题寻找解决方案已有一段时间了,但似乎找不到有效的答案。我有一个表格,其中包含根据日期和案件类型向不同律师流入的案件。请记住,我是VBA和SQL方面的新手
我正在尝试做的是:
我需要根据日期将大量案件分类为每个律师获得多少案件,在这种情况下,该案件是上个月重复发生的。基本上,我需要每个月都能按下一个按钮,然后自动检索上个月的数据并将其放在excel工作簿中。所有这些实际上都成功了,除了以下问题
问题:
每当我运行宏时,它都不会检索全部金额。例如,在二月份,我知道有159个新案例,但是该公式仅找到155个。现在,我可以通过提示inputbox
输入startdate
和enddate
并输入格式DD/MM/YY HH/MM/SS
来获得正确的结果。 -但是我想删除inputbox
部分,所以我不必键入任何内容。该代码应自动进入其输入的最后一个月。对于2月,从01/02/18 00:00:01
到28/02/18 23:59:59
我认为问题是因为我当前的公式无法完全扩展,因此排除了小时,分钟和秒-或类似的东西。
我也很自信可以用dateadd
函数修复它,我只是不知道如何。如何指定Startdate
和Enddate
包括整个月,直到第一个月和最后一秒?
可能很容易解决,但这超出了我的范围
码:
Dim Startdate As Date
Dim Enddate As Date
Startdate = DateSerial(Year(Now), Month(Now) - 1, 1)
Enddate = DateSerial(Year(Now), Month(Now), 0)
Debug.Print Startdate, Enddate
Set rs = conn.Execute("Select [Jurist], [OpretDato], [Tilgang] From [dbo].[TilgangOgAfgangAfSagerTilgangIPeriodenView]" & _
"Where [OpretDato] Between '" & Startdate & "' And '" & Enddate & "' and (Jurist not in ('BF','MLT','NL') or Jurist is null)" & _
"Order by [Jurist] ASC ;")
最佳答案
您的四个记录可能从最后一天开始丢失,因为2018-02-28
= 2018-02-28 00:00:00
= 2月28日开始的午夜。
您的公式的另一个问题:想想2019年1月会发生什么...您的公式(以及此处的其他答案)将返回:
Year = 2019 Month = 0 Day = 1
显然,那是行不通的。您不能只是“从月份中减去1”来持续获得上个月。
另外,您不应该指定结束时间
23:59:59
和开始时间00:00:01
,因为您每年跳过12月……以及12月。这是处理“上个月”条件的正确方法:
EndDate = DateSerial(Year(Now), Month(Now), 1)
StartDate = DateSerial(Year(EndDate - 1), Month(EndDate - 1), 1)
然后您的
SQL
标准将是:WHERE ([RecordDateTime] >= StartDate And [RecordDateTime] < EndDate)
请注意,
=
不包括在条件的后半部分。您调整后的代码:
Set rs = conn.Execute("Select [Jurist], [OpretDato], [Tilgang] " & _
"From [dbo].[TilgangOgAfgangAfSagerTilgangIPeriodenView]" & _
"Where [OpretDato] >= '" & Startdate & "' And [OpretDato] < '" & _
Enddate & "' and (Jurist not in ('BF','MLT','NL') or Jurist is null)" & _
"Order by [Jurist] ASC ;")