我已经在很长一段时间内搜索了我的问题的解决方案,但似乎无法找到有效的答案。我有一张表格,根据日期和案例类型向不同的律师提供案件。请记住,在谈到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 ;")
答案 0 :(得分:4)
您的四条记录可能在最后一天丢失,因为2月28日2018-02-28
= 2018-02-28 00:00:00
=午夜开始。
你的公式的另一个问题:想想2019年1月会发生什么......你的公式(以及其他答案)将会返回:
Year = 2019 Month = 0 Day = 1
显然,这不起作用。你不能只是“从月中减1”来持续获得前一个月。
此外,您不应指定23:59:59
的结束时间和00:00:01
的开始时间,因为您每年都会跳过 12分钟 < / strong> ...以及 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 ;")
答案 1 :(得分:2)
或者,使用PIPENV_IGNORE_VIRTUALENVS
符合@ ashleedawg使用严格较少的source ~/some/virtualenv/location/bin/activate
PIPENV_IGNORE_VIRTUALENVS=1 pipenv install
,而不是当前月份 EndDate (任何年/月都一致)。此外,下面使用ADO parameterization将SQL代码与VBA数据分开,而不是字符串插值(行业最佳实践)。
DateAdd()