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 月 (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) を「Date」変数に渡す必要があります

于 2012-10-31T14:37:42.237 に答える