为什么我的功能告诉我有类型不匹配?

时间:2012-10-31 14:33:07

标签: function access-vba

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

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

我传递的值如下:

FirstOfMonth(4)

该功能的目的是将本月第一天的日期返回为“MonthsAgo”。

然而,每当我运行它时,它告诉我我有类型不匹配。

我是编程的新手,所以如果有人可以指出我正确的方向指出我哪里出错了,我会非常感激。这让我慢慢解决了一个相当简单的问题。

3 个答案:

答案 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。