これらの関数はクエリーや、モジュールで呼び出すことが出来ます。
継ぎ足ししてきたので、古い書き方もありますが、ご容赦ください。
日付関連関数 Accessモジュール
月末の計算
Public Function LastOfMon(pDate As Variant) As Variant
' 引数の日付が属する月度の最後の日付を返す'
Dim DayWork As Date
If IsNull(pDate) Then
LastOfMon = Null
Exit Function
End If
DayWork = DateSerial(Year(pDate), Month(pDate), 1)
LastOfMon = DateAdd("m", 1, DayWork) - 1
End Function
続いてDayWork に1ヶ月足して翌月の1日を出し、そこからー1日すると月末となります
請求日の計算
Public Function Seikyubi(DenDay, Sime) As Date
If IsNull(Sime) Then Sime = 0
If Sime = 31 Then
Seikyubi = LastOfMon(DenDay)
ElseIf Sime = 0 Then
Seikyubi = DenDay
ElseIf Sime > 31 Then
Seikyubi = DenDay
Else
Seikyubi = DateValue(Format$(DateAdd("m", 1, DenDay) - Sime, "yyyy/mm/") & Sime)
End If
End Function
締め日が月末であれば当月末日をセット、0や31日(末日)以外は当日をセット
20日や15日などのそれ以外の日は、
- 伝票日付に1ヶ月を足す
- そこから締め日の日数を引く< br /> これで、当月の締め日前なのか翌月分なのかが決定
- 上記年月に締め日を足して日付とする
締め日が複数の場合の請求日
といった複雑な場合もあります。
当社のお客様、花の仲卸様でのカスタマイズ、関数ではありません。
Private Sub SetSeikyubi()
Dim WorkSime As Integer, Wday As Integer, Wtuki As Integer
WorkSime = Day(Me![伝票日付])
If Me![締め日1] = 0 Then
Wday = Day(Me![伝票日付])
Wtuki = 0
End If
If WorkSime <= Me![締め日1] Then
If Me![締め日1] = 31 Then
Wday = Day(LastOfMon(Me![伝票日付]))
Else
Wday = Me![締め日1]
End If
Wtuki = 0
ElseIf WorkSime <= Me![締め日2] Then
If Me![締め日2] = 31 Then
Wday = Day(LastOfMon(Me![伝票日付]))
Else
Wday = Me![締め日2]
End If
Wtuki = 0
ElseIf WorkSime <= Me![締め日3] Then
If Me![締め日3] = 31 Then
Wday = Day(LastOfMon(Me![伝票日付]))
Else
Wday = Me![締め日3]
End If
Wtuki = 0
ElseIf Me![締め日2] = 0 Then '締め日が1つの場合
Wday = Me![締め日1]
Wtuki = 1
ElseIf Me![締め日3] = 0 Then '締め日が1つの場合
Wday = Me![締め日1]
Wtuki = 1
End If
Me![請求日] = DateValue(Format$(DateAdd("m", Wtuki, Me![伝票日付]), "yyyy/mm/") & Wday)
End Sub
週締め(毎週金曜とか)
Private Sub Syujime()
'週締めの処理
Dim NouhinYoubi As Integer, Wday As Integer
NouhinYoubi = Weekday(Me![伝票日付])
If Me![曜日] < NouhinYoubi Then ' 翌週の締め
Wday = Me![曜日] + (7 - NouhinYoubi)
Me![請求日] = DateAdd("d", Wday, Me![伝票日付])
ElseIf Me![曜日] = NouhinYoubi Then '当日締め
Me![請求日] = Me![伝票日付]
Else
Wday = Me![曜日] - NouhinYoubi
Me![請求日] = DateAdd("d", Wday, Me![伝票日付])
End If
End Sub
下記は、システム日付から先月の1日と先月末を計算しています帳票印刷画面での、初期値に利用してます。
Public Function Zengetu1() As Date
'システム日付の1ヶ月前の1日を返す
Dim DayWork As Date
DayWork = DateAdd("m", -1, Date)
Zengetu1 = DateSerial(Year(DayWork), Month(DayWork), 1)
End Function
Public Function Zengetu31() As Date
'システム日付の1ヶ月前の末日を返す
Dim DayWork As Date
DayWork = DateSerial(Year(Date), Month(Date), 1)
Zengetu31 = DateAdd("d", -1, DayWork)
End Function
0 件のコメント :
コメントを投稿