access 2003 コマンドボタンのEnabledイベントについて
いつもお世話になっています。
どなたかわかる方アドバイスいただけないでしょうか?
現在、会社の勤務表をaccess2003にて作成しています。
勤務状況を保存する勤務表テーブルと入力用コントロールが
複数あるフォーム1フォームがあります。
出社時間や退社時間、作業内容を入力し登録コマンドボタンの
イベントで入力内容を勤務表テーブルに入力し、同時に
その月1ヶ月分の勤務状況をフォーム1フォーム上のリストボックス
に表示させています。
今回は
表示している1カ月分の勤務に対して前月、翌月の勤務を表示する
コマンドボタンを作成しました。
前月は問題なくできたのですが、翌月に関してはシステム時間に
対して未来の月に関しては表示させない(コマンドボタンを使用不可
にする制限をつけ)ようとしているのですが、できません。
翌月コマンドボタンのイベントで未来の月を表示させようとした時に
使用不可にしようとしても翌月コマンドボタンのイベントで
翌月コマンドボタンを使用不可にはできないみたいですし、
どうにもこまっています。
なにかいい案ありませんでしょうか?どなたかお願いします。
ちなみに翌月ボタンに関するコードです。
'翌月ボタンに関するイベント
Private Sub コマンド89_Click()
DoCmd.SetWarnings False
Dim yokugetucount
Dim yokugetu
yokugetucount = DCount("*", "勤務表", "[ユーザー名] = [Forms]![フォーム1]![コンボ56] AND [日付] >= DateSerial(Year(calendar6),Month(calendar6)+1,1) and [日付] < Dateserial(Year(calendar6),Month(calendar6)+2,1)")
If yokugetucount > 0 Then
Me!リスト76.RowSourceType = "Table/Query"
Me!リスト76.RowSource = "select id,format([日付],'mm/dd'),曜日,出社,出社属性,退社,退社属性,作業時間,作業内容 from 勤務表 where [ユーザー名] = [forms]![フォーム1]![コンボ56] and ([日付] >= DateSerial(Year(calendar6),Month(calendar6)+1,1) and [日付] < Dateserial(Year(calendar6),Month(calendar6)+2,1)) ORDER BY 日付;"
Else
yokugetu = Format(DateSerial(Year(Calendar6), Month(Calendar6) + 1, 1), "yyyy/mm")
Select Case Right(yokugetu, 2)
Case 1, 3, 5, 7, 8, 10, 12
X = 31
Case 4, 6, 9, 11
X = 30
Case 2
If IsDate(yokugetu & "/29") = True Then
X = 29
Else
X = 28
End If
End Select
For C = 1 To X
Work1 = yokugetu & "/" & Right("00" & C, 2)
Work2 = Format(yokugetu & "/" & Right("00" & C, 2), "aaa")
kakunin = DCount("*", "勤務表", "[ユーザー名] =
[Forms]![フォーム1]![コンボ56] AND 日付 = #" & Work1 & "#")
If (kakunin = 0) And (Me!コンボ56 <> "") Then
DoCmd.RunSQL "Insert into 勤務表(ユーザー名,日付,曜日) values ([forms]![フォーム1]![コンボ56],#" & Work1 & "#,'" & Work2 & "')"
End If
Next
End If
Me!リスト76.RowSourceType = "Table/Query"
Me!リスト76.RowSource = "select id,format([日付],'mm/dd'),曜日,出社,出社属性,退社,退社属性,作業時間,作業内容 from 勤務表 where [ユーザー名] = [forms]![フォーム1]![コンボ56] and ([日付] >= DateSerial(Year(calendar6),Month(calendar6)+1,1) and [日付] < Dateserial(Year(calendar6),Month(calendar6)+2,1)) ORDER BY 日付;"
Calendar6 = DateSerial(Year(Calendar6), Month(Calendar6) + 1, 1)
テキスト88 = Calendar6
DoCmd.SetWarnings True
End Sub
前月ボタンはEnd Subの前に
If DateSerial(Year(Calendar6), Month(Calendar6) + 1, Day(Calendar6)) > DateSerial(Year(Date), Month(Date), Day(Date))
Then
コマンド89.Enabled = False
Else
コマンド89.Enabled = True
End If
を入れる事でやりたい事ができました。
お礼
ご回答ありがとうございます。 ご指示通り参考にしながら、下記VBAを作成して思う通りできました。ありがとうございました。 Private Sub close1_AfterUpdate() Dim i As Date, j As Date, k As Date, l As Date i = DateSerial(Year(Date), Month(Date) - 1, [close1]) '先月の31日以外の締日から請求日付を取得 j = DateSerial(Year(Date), Month(Date), 0) '先月の31日の締日から請求日付を取得 k = DateSerial(Year(Date), Month(Date), [close1]) '今月の31日以外の締日から請求日付を取得 l = DateSerial(Year(Date), Month(Date) + 1, 0) '今月の31日の締日から請求日付を取得 If MsgBox("今月の締日ですか?", vbYesNo) = vbYes Then If (Me!close1) <> 31 Then Me!day1 = k Else Me!day1 = l End If ElseIf (Me!close1) <> 31 Then Me!day1 = i Else Me!day1 = j End If End Sub