我正在尝试使用以下功能:
Private Function FirstOfMonth(MonthsAgo As Integer) As Date
FirstOfMonth = DateSerial(Year(Now()), Month(Now() - MonthsAgo), 1)
End Function
我传递的值如下:
FirstOfMonth(4)
该功能的目的是将本月第一天的日期返回为“MonthsAgo”。
然而,每当我运行它时,它告诉我我有类型不匹配。
我是编程的新手,所以如果有人可以指出我正确的方向指出我哪里出错了,我会非常感激。这让我慢慢解决了一个相当简单的问题。
答案 0 :(得分:1)
我认为你打算做的是:
' Note the brackets change around 'Month(Now()) - MonthsAgo'
FirstOfMonth = DateSerial(Year(Now()), Month(Now()) - MonthsAgo, 1)
然而,即使这样也行不通。考虑月份是1月(1)的情况。在那种情况下,您最终会得到2012/-3/1
的日期,这显然是完全废话!
您需要使用DateAdd功能:
DateAdd("m", 4, Now())
所以你的整个功能看起来像是
Private Function FirstOfMonth(MonthsAgo As Integer) As Date
Dim newDate
newDate = DateAdd("m", 0 - MonthsAgo , Now())
FirstOfMonth = DateSerial(Year(newDate), Month(newDate), 1)
End Function
答案 1 :(得分:0)
您必须将FirstOfMonth(4)传递给“Date”变量
答案 2 :(得分:0)
问题在于:
Month(Now() - MonthsAgo)
应该是:
Month(Now()) - MonthsAgo
第一个中发生的事情是Now()返回Date类型的值,然后你试图从中减去一个整数,这导致类型不匹配。
在第二个月中,将Now()返回的Date的月份部分作为整数返回。然后你可以从那个整数中减去MonthsAgo。