我已经为我的问题寻找解决方案已有一段时间了,但似乎找不到有效的答案。我有一个表格,其中包含根据日期和案件类型向不同律师流入的案件。请记住,我是VBA和SQL方面的新手

我正在尝试做的是:

我需要根据日期将大量案件分类为每个律师获得多少案件,在这种情况下,该案件是上个月重复发生的。基本上,我需要每个月都能按下一个按钮,然后自动检索上个月的数据并将其放在excel工作簿中。所有这些实际上都成功了,除了以下问题

问题:

每当我运行宏时,它都不会检索全部金额。例如,在二月份,我知道有159个新案例,但是该公式仅找到155个。现在,我可以通过提示inputbox输入startdateenddate并输入格式DD/MM/YY HH/MM/SS来获得正确的结果。 -但是我想删除inputbox部分,所以我不必键入任何内容。该代码应自动进入其输入的最后一个月。对于2月,从01/02/18 00:00:0128/02/18 23:59:59

我认为问题是因为我当前的公式无法完全扩展,因此排除了小时,分钟和秒-或类似的东西。

我也很自信可以用dateadd函数修复它,我只是不知道如何。如何指定StartdateEnddate包括整个月,直到第一个月和最后一秒?

可能很容易解决,但这超出了我的范围

码:

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 ;")

07-28 02:04
查看更多