1

我正在尝试使以下功能起作用:

Private Function FirstOfMonth(MonthsAgo As Integer) As Date
  FirstOfMonth = DateSerial(Year(Now()), Month(Now() - MonthsAgo), 1)
End Function

我传入的值如下:

FirstOfMonth(4)

该函数的目的是返回月份第一天的日期“MonthsAgo”。

但是,每当我运行它时,它都会告诉我类型不匹配。

我是编程新手,所以如果有人能指出我哪里出错的正确方向,我将不胜感激。这让我在解决一个相当简单的问题时放慢了速度。

4

2 回答 2

2

我认为你的意思是:

' Note the brackets change around 'Month(Now()) - MonthsAgo'
FirstOfMonth = DateSerial(Year(Now()), Month(Now()) - MonthsAgo, 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
于 2012-10-31T14:38:34.707 回答
0

您必须将 FirstOfMonth(4) 传递给“日期”变量

于 2012-10-31T14:37:42.237 回答