重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

いつもお世話になっています。

どなたかわかる方アドバイスいただけないでしょうか?

現在、会社の勤務表を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

を入れる事でやりたい事ができました。

A 回答 (1件)

コードをまるっきり読んでませんが・・・質問内容は判りました



コマンドボタンの使用不可、使用可能の制御は、普通
Currentイベント(レコード移動時)に、初期の記載
条件が変化した際、使用不可、使用可能の制御を行う場合、そのコントロール上のイベントに、記載します
(大体、Currentイベントを呼び出して終わり)

と、言うことで判ります?
イベント発生のCurrentイベントは、フォームを開いた後、レコードのデータを呼び出してくる時にも、レコードが移動して、データを呼び出してくる時にも、発生するイベントで、レコードのデータは、入れ替わった後になってます
    • good
    • 0
この回答へのお礼

アドバイスありがとうございました。

大変感謝しております!!!

アドバイス頂いた方法にてやりたい事ができる

ようになり、一歩前進することができました。

また、何かありましたらよろしくお願いします。

では、失礼します。

お礼日時:2008/07/17 17:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!