Access 2003コマンドボタンのEnabledイベントについて

このQ&Aのポイント
  • Access 2003で勤務表を作成している際に、コマンドボタンのイベント制御について質問があります。
  • 勤務状況を入力するフォームに表示されている1カ月分の勤務に対して、前月と翌月の勤務を表示するコマンドボタンを作成しましたが、翌月の表示に制限をかけることができません。
  • 翌月コマンドボタンのイベントで未来の月を表示させようとした時に、翌月コマンドボタンを使用不可にする制限をかけることができません。解決策を教えてください。
回答を見る
  • ベストアンサー

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 を入れる事でやりたい事ができました。

質問者が選んだベストアンサー

  • ベストアンサー
  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.1

コードをまるっきり読んでませんが・・・質問内容は判りました コマンドボタンの使用不可、使用可能の制御は、普通 Currentイベント(レコード移動時)に、初期の記載 条件が変化した際、使用不可、使用可能の制御を行う場合、そのコントロール上のイベントに、記載します (大体、Currentイベントを呼び出して終わり) と、言うことで判ります? イベント発生のCurrentイベントは、フォームを開いた後、レコードのデータを呼び出してくる時にも、レコードが移動して、データを呼び出してくる時にも、発生するイベントで、レコードのデータは、入れ替わった後になってます

leadman
質問者

お礼

アドバイスありがとうございました。 大変感謝しております!!! アドバイス頂いた方法にてやりたい事ができる ようになり、一歩前進することができました。 また、何かありましたらよろしくお願いします。 では、失礼します。

関連するQ&A

  • ACCESS 2003の条件分岐について教えて頂けないでしょうか?

    access2003を勉強中です。 先週1週間かけても解決できないことがありまして、どなたか教えて頂けないでしょうか。 内容は 会社で使用する勤務表に関してです。 ユーザー名(コンボボックス)、日付(カレンダーコントロール)、 出社時間(テキストボックス)、退社時間(テキストボックス 、作業内容(テキストボックス)をユーザーが入力し「登録」 コマンドボタンのイベントで入力した内容を、勤務表テーブルに 反映させたいのです。 その時に同じユーザーの同じ日付を2件入力させないようにしたいので フォームに入力された内容からユーザー名と日付によって、 同じ内容が勤務表テーブルに無ければinsert、有ればupdateと 条件分岐をしたいのです。 しかし、 Public Sub kinmu() Dim mmrs As ADODB.Recordset Dim mmcn As ADODB.Connection Set mmrs = New ADODB.Recordset Set mmcn = Application.CurrentProject.Connection mmrs.Open "勤務表", mmcn, adOpenKeyset, adLockOptimistic mmrs.MoveFirst If DCount("[ユーザー名] & [日]", "[勤務表]", "[ユーザー名]=[Forms]![フォーム1]![コンボ56]" & _ "and[日]=[Forms]![フォーム1]![テキスト88]") = 0 Then mmcn.Execute "INSERT INTO 勤務表 ([ユーザー名],[日],[出社],[退社],[作業内容]) VALUES ([Forms]![フォーム1]![コンボ56],[Forms]![フォーム1]![テキスト88],[Forms]![フォーム1]![テキスト8],[Forms]![フォーム1]![テキスト17],[Forms]![フォーム1]![テキスト28]);" Else mmcn.Execute "UPDATE 勤務表 SET (ユーザー名=[Forms]![フォーム1]![コンボ56],日=[Forms]![フォーム1]![テキスト88],出社=[Forms]![フォーム1]![テキスト8],退社=[Forms]![フォーム1]![テキスト17],作業内容=[Forms]![フォーム1]![テキスト28] where [ユーザー名]=[Forms]![フォーム1]![コンボ56] and [日]=[Forms]![フォーム1]![テキスト88]);" End If として、「登録」コマンドボタンのイベントとしてCallキーワードによって呼び出そうとしているのですが、うまくいきません。 最初はDCount関数で件数を求め、それを変数に入れる。 IIF関数による分岐。などいろいろ試してはいたのですが、、、。 どなたか教えて下さい。よろしくお願いします。

  • アクセスVBAの検索で。

    アクセスでカレンダーというかスケジュールを管理できるようなものをつくろうとしています。 非連結フォーム1に ・入力年 ・入力月 ・[1]-[45]まで(それぞれ年月が変わると日付がかわる) という感じで入っています。 T_用件というテーブルには ・年(数値型 ・月(数値型 ・日(数値型 ・用件(テキスト型) とあり、これをもとに「F_用件」フォームを作成してあります。 フォーム1のボタンの1つを例にとるとこんな感じです。 If Me![7].Value <> "" Then Year = "(T_用件.年=" & (Me!入力年.Value) & ")" Month = "(T_用件.月=" & (Me!入力月.Value) & ")" Day = "(T_用件.年=" & (Me![7].Value) & ")" WhereCond = WhereCond & " AND (" & Year & " AND " & Month & " AND " & Day & ")" End If WhereCond = Mid(WhereCond, 6) DoCmd.OpenForm "F_用件", acNormal, , WhereCond こうするとF_用件フォームは開くのですが、きちんと検索されてきません。 どこが悪いのでしょうか? よろしくお願いします。

  • ACCESS コマンドボタンが使えない・・・

    フォームに配置したコマンドボタンが「現在このアクションを実行できません」のメッセージが出て使えなくなります。 マクロを割り当てて作ったコマンドボタンも同様で、「他の作業を実行しているためにこのアクションを実行できません・・」とメッセージが出ます。 最初、フォームを開いたときは問題なく使用できます。フォーム上のコンボボックスに入る値を、クエリから拾っているのですが、その値を別フォームで新規登録しようとするときに発生するみたいです。 他の作業を実行中とありますが、何を実行中で止まってしまうのか、調べる方法はないでしょうか? 良いお知恵をお貸し下さい。お願いいたします。

  • アクセスにて2

    前回http://okwave.jp/kotaeru.php3?q=2234970にて質問させていただいたのですがその続きなのですが カレンダーはできたのですが カレンダーで選択した日付を同じフォームのテキストボックスへの 表記はできました。 テーブルの内容は氏名 日付 時間 となってます そのテーブルに入力したいのですができますでしょうか?? あとカレンダーフォームを起動後当日もっていきたいのですが Private Sub Form_Open(Cancel As Integer) Me.calendar0.Year = Year(Date) Me.calendar0.Month = Month(Date) Me.calendar0.Day = Day(Date) Me.calendar0.Value = Date End Sub to しているのですがどうもいかないのですが原因わかりますでしょうか?? フォーム内で氏名(テキストボックス)の内容を前回入力内容を残しているのですが そのままレコードの移動をすると氏名以外の内容は テーブルデータに落ちるのですが 内容を残すだけではデータとして 落ちないのでしょうか?? 質問ばかりで申し訳ありません

  • エクセルのVBAで質問があります。

    現在自分はカレンダーを作成していて、カレンダーに祝日を入れたいと思っています そこで これを if文もしくはselectcase どっちを使ったら楽か教えてもらいたいです Sub MakeCalendar(hi As Date) Dim i As Integer 'カレンダーにセットする日付 Dim g As Integer '日付をセットする行番号 Dim r As Integer '日付をセットする列番号 Dim lastDay As Integer '作成するカレンダーの月末 g = 2 'その月の開始曜日を算出 r = Weekday(DateSerial(Year(hi), Month(hi), 1), vbSunday) '指定された日付の翌月1日をもとて、日付の前の日を計算する lastDay = Day(DateSerial(Year(hi), Month(hi) + 1, 1) - 1) For i = 1 To lastDay 'iに日付の設定 Cells(g, r).Value = i If r = 7 Then r = 1 '戻して g = g + 1 '1行下に書く Else r = r + 1 '1列→に移動する End If Next End Sub Sub test() Range("A2:G7").Value = "" 'A2~G2にカレンダー表示 MakeCalendar Range("I2").Value 'I2に日付を入力する End Sub Sub test() Range("A2:G7").Value = "" 'A2~G2にカレンダー表示 MakeCalendar Range("I2").Value 'I2に日付を入力する End Sub このようなマクロを組んでいまして、祝日(ゴールデンウィークなど)を赤で塗りつぶすような物を考えています。 VBAは初心者でまだあまりわかっていないので、ご教授ください

  • Access2003 DateSerial関数について教えて頂けないでしょうか?

    いつも助けていただき感謝しています。 また、わからないことがでてしまいまして、どなたかアドバイス 頂けないでしょうか? 現在access2003にて勤務表を作成中です。 作成中に様々なアドバイス頂き大分進んだのですが今回は、、、 勤務表テーブルとフォーム1フォームがあります。 フォームにはユーザーを選択するコンボボックスと年月を検索する コマンドボックス(例えば2008年04月分の勤務を検索したい場合に押します。) があります。(他のコントロールもあるのですが今回は影響ないと思いますので省略します。) 検索コマンドボックスを押した際、ユーザーコマンドボックスにて選択されている ユーザーを使用。空白ならインプットボックスを表示させ検索したいユーザーを入力してもらい、 そのユーザーを使用します。 その後、さらにインプットボックスを表示し検索したい月を入力してもらい ユーザーの検索したい月の勤務をフォーム内のリストボックスに表示させたいのですが、、、 インプットボックスに入力された月をどのように勤務表テーブルの日付フィールドと比較 すればよいのかわかりません。 SQL文でユーザー名から勤務表テーブルのデータを検索selectできるところまでいったのですが 条件にインプットボックスの値を使用するようにためしてもうまくいきません。 DateSerial関数を使用するなどやってはみたのですが、、、どなたかアドバイスよろしく お願いします。 Private Sub コマンド90_Click() Dim user Dim userkensaku3 Dim username Dim userkensaku2 Dim kensaku Dim tukisuu Dim saisyouti Dim gennzai If IsNull(コンボ56) = True Then user = InputBox("検索したいユーザー名を入力して下さい。 " ) userkensaku3 = DCount("*", "ユーザー", "ユーザー名='" & user & "'") Else username = コンボ56 userkensaku2 = DCount("*", "ユーザー", "ユーザー名='" & username & "'") End If kensaku = userkensaku2 Or userkensaku3 If kensaku = 0 Then MsgBox ("検索したいユーザーは登録されていません。登録をするか、入力をやり直して下さい。") Else tukisuu = InputBox("検索したい年、月を入力して下さい。" & vbCrLf & vbCrLf & "例 2008/06", "検索年月入力画面") saisyouti = Format(DMin("[日付]", "勤務表"), "yyyy/mm") gennzai = Format(Date, "yyyy/mm") End If If tukisuu = "" Then MsgBox ("値が入力されていません。") ElseIf tukisuu < saisyouti Then MsgBox ("検索対象外です。入力をやりなおして下さい。") ElseIf tukisuu > gennzai Then MsgBox ("検索対象外です。入力をやりなおして下さい。") ElseIf user = "" Then リスト42.RowSourceType = "Table/Query" リスト42.RowSource = "select ユーザー名,日付,出社,出社属性,退社,退社属性,作業時間,作業内容 from 勤務表 " & _ "where ユーザー名 ='" & username & "' ;" End If End Sub

  • ACCESSのSQLクエリについて質問です

    よろしくお願いします。 SQLのクエリで、 WHERE (((Year([日付01]))=Year(Date())) AND ((Month([日付01]))=Month(Date())+1)); と記述し、当月の翌月のテーブルを表示させていましたが、これだと12月の次は13月になってしまいます‥。 これをちゃんと翌年の1月が表示されるようにしたいのですが、どのようにすればよいかお教え頂けますでしょうか‥。 元々分かる方に教えて貰いながら作ったものなので、この文章だけで分かって頂けるか不安ですが、どうかよろしくお願いします。

  • Access2010 イベントが動かない

    超初心者です。言葉の意味も分からない場合がありますので、どうか噛み砕いて教えてくださると助かります。 他の方がAccess2003で作成されたAccessプログラムです。 コンボボックス1 コンボボックス2 コンボボックス3 コンボボックス4 テキスト5 コマンドボタン6 コマンドボタン7 コンボボックス1で選択したものに関連するものが、コンボボックス2で選択できるようになる コンボボックス2で選択したものに関連するものが、コンボボックス3で選択できるようになる コンボボックス3で選択したものに関連するものが、コンボボックス4で選択できるようになる コンボボックス4まで選択をするとテキスト5に選択されたものが表示される。 コマンドボタン6を押すと、コンボボックス1~4、テキスト5がクリアされ、また新しくコンボボックス1から選択できるようになる。 コマンドボタン7を押すとAccessが終了する このように設定されるようです。 Access2003では正常に動いていました。 しかしOffice2010(Access2010?)を導入したために、上記のプログラムの中で、コマンドボタン6,7が動作しません。 コンボボックス1で選択したものに関連するものが、コンボボックス2で選択できるようになる コンボボックス2で選択したものに関連するものが、コンボボックス3で選択できるようになる コンボボックス3で選択したものに関連するものが、コンボボックス4で選択できるようになる コンボボックス4まで選択をするとテキスト5に選択されたものが表示される。 このアクションは問題ありません。正常に動きます。 しかし、 コマンドボタン6を押すと、コンボボックス1~4、テキスト5がクリアされ、また新しくコンボボックス1から選択できるようになる。 コマンドボタン7を押すとAccessが終了する この2つができません。 コマンドボタン6のイベントプロージャでは、 Private Sub コマンド6_Click() Me![コンボボックス1] = "" Me![コンボボックス2] = "" Me![コンボボックス3] = "" Me![コンボボックス4] = "" End Sub と書かれています。 コマンド7はプロパティシートのイベントのタブ、クリック時に「終了」となっており、マクロで動いているようです。 マクロは、クリックするとAccess終了というだけの簡単なマクロです。 <課題・問題> ・コマンドボタン6を押してもコンボボックス1~4、テキスト5が消去(クリア)されない。クリアさせたい。 ・(Access2003で実行したときに)コマンドボタン6を押してコンボボックス1~4、テキスト5を消去(クリア)しても、データを保持しているらしく、 コンボボックス1~2で選択しても、前回選択したコンボボックス2に関連するものが、コンボボックス3に選択肢が出る。正しく抽出されてこない。 ・コマンド7を押してもAccess終了が実行されない   引数’オプション’を指定した場合、’Quit’マクロアクションを無効モードで実行したり、埋め込みマクロから呼び出して実行したりすることはできません。   とエラーになる。(このエラーの意味も分かりません) どうしたら課題をクリアして動く、使えるようになるのでしょうか? 教えてください。 宜しくお願い致します。

  • ACCESSのイベントで

    こんにちは。 ACCESSのフォームに、テキストボックスと コンボボックスがいくつかあり、 コマンドボタンが1つあります。 コマンドボタンを押す(クリック)すると、 その直前までアクティブだったコントロールの 名前(cmb○○ or txt○○ にしてます)が 知りたいのです。 どうすればよいでしょうか。お願いします。 ちなみに1つのフォームにコントロールが20~30あり、 そういうフォームが30~40こあるので、 そのコントロールに1つ1つイベントを 追加していく(forcusイベント等で変数に代入していく) 方法以外でお願いします。 なにしろ、全部で1000こ近くあるので・・・

  • Access BeforeUpDateイベントで

    こんにちは。お世話になります。 行き詰ってしまったのでお力を貸してください。 Accessフォームでコンボボックスに規定値で必須としています。 そして、フォーカス喪失後に以下のように書いていたのですが、新規追加しようとして、閉じるボタンや、戻るボタンを押すときにまで、アラートを出してくれちゃうのです。それをどうにかしたくて、更新前処理に下記のように入力したのですが、ぜんぜん反応してくれません。 If Me.対処方法 = "必須" Then MsgBox "方法を選択してください。" Cancel=true End If 何か間違えてるのでしょうか?どなたかお知恵を貸してください。よろしくお願いします。

専門家に質問してみよう