Ms access 如何在VB中获得上个月的开始和结束

Ms access 如何在VB中获得上个月的开始和结束,ms-access,vba,Ms Access,Vba,我试图创建一些VB代码,将得到上个月的开始和结束。 我可以选择当前月份,即: Month(DateValue(Now)) 它将返回3。从那里我可以拿走1,给我2。这很好,但是当我在一月份的时候,我重复这个,它给我零-我的代码将失败。有人知道如何让前几个月的开始和结束的一天呢 谢谢尝试以下方法以数字形式显示月份: Month(DateAdd("m", -3, Now)) 它会给你12月份的12 因此,在您的情况下,您可以使用Month(DateAdd(“m”,-1,Now))来分包一个月。上个

我试图创建一些VB代码,将得到上个月的开始和结束。 我可以选择当前月份,即:

Month(DateValue(Now))
它将返回3。从那里我可以拿走1,给我2。这很好,但是当我在一月份的时候,我重复这个,它给我零-我的代码将失败。有人知道如何让前几个月的开始和结束的一天呢


谢谢

尝试以下方法以数字形式显示月份:

Month(DateAdd("m", -3, Now))
它会给你12月份的
12


因此,在您的情况下,您可以使用
Month(DateAdd(“m”,-1,Now))
来分包一个月。

上个月的第一天始终是1,要获得上个月的最后一天,请使用0和DateSerial:

''Today is 20/03/2013 in dd/mm/yyyy
DateSerial(Year(Date),Month(Date),0) = 28/02/2013 
DateSerial(Year(Date),1,0) = 31/12/2012 
您可以从上面得到第一天,如下所示:

LastDay = DateSerial(Year(Date),Month(Date),0)
FirstDay = LastDay-Day(LastDay)+1
另见:


这是另一种方法,但我认为Remou的版本看起来更干净。

我在第一天和最后一天有类似的公式

月初一

FirstDay = DateSerial(Year(Date),Month(Date),1)
LastDay = DateSerial(Year(Date),Month(Date)+ 1,0) 
下个月的零日是该月的最后一天

FirstDay = DateSerial(Year(Date),Month(Date),1)
LastDay = DateSerial(Year(Date),Month(Date)+ 1,0) 

为了补充@Fionnuala所说的内容,可以使用以下函数。这些甚至适用于闰年

'If you pass #2016/20/01# you get #2016/31/01#
Public Function GetLastDate(tempDate As Date) As Date
    GetLastDate = DateSerial(Year(tempDate), Month(tempDate) + 1, 0)
End Function

'If you pass #2016/20/01# you get 31
Public Function GetLastDay(tempDate As Date) As Integer
    GetLastDay = Day(DateSerial(Year(tempDate), Month(tempDate) + 1, 0))
End Function
用法:

'Get End of Month of Previous Month - Pass today's date
EOM = GetEOMPrev(Date.Today)

'Get First of Month of Previous Month - Pass date just calculated
FOM = GetFOMPrev(EOM)
试试这个

First_Day_Of_Previous_Month = New Date(Today.Year, Today.Month, 1).AddMonths(-1)

Last_Day_Of_Previous_Month = New Date(Today.Year, Today.Month, 1).AddDays(-1)

这在我的主潜艇上对我来说是可靠的

Dim defDate1 As Date, defDate2 As Date

'** Set default date range to previous month
defDate1 = CDate(Month(Now) & "/1/" & Year(Now))
defDate1 = DateAdd("m", -1, defDate1)
defDate2 = DateAdd("d", -1, DateAdd("m", 1, defDate1))

您好,Remou刚刚再次检查了您的代码,有另一个问题-为什么我这样做:LastDay=DateSerial(年(日期),月(日期)-1,1-1)我得到的是2013年1月31日,而不是2013年2月28日?当然,Month(Date)-1返回2意味着您有Month-2,Month(Date)-1一次,day一次,0一次。这个月的第0天是前一个月的最后一天,所以2月是dateserial(2013,3,0),而不是如您所示。哦,好的-这就是决定。感谢?DateSerial(年份(2015年12月1日)、Month(2015年12月31日)、0)11/30/1899@barry17您正在通过
12/1/2015
,它被解释为数学,计算结果如下:
DateSerial(年份(0.005955334987759305210918114143921)、Month(0.000192107580244916581229488513568)、0)
用引号括起日期:
日期序列(年(“2015年12月1日”)、月(“2015年12月31日”)、0)
。Excel不会隐式地将整数转换为日期,但它会将字符串转换为日期。这是如何将上个月的开始和结束日期都转换为日期的?非常确定这不是VBA。为什么不在代码中添加解释以改进帖子?我已经好几年没有使用VBA了-有人能告诉我这是否是一个更好的解决方案吗?虽然我希望投票表决能回答我自己的问题……但这不是VBA。