- ベストアンサー
ACCESS2000 ボタンメッセージについて
- ACCESS2000を使用しており、フォームのボタンを押すとレポートが開くようになっています。しかし、フォームのフィールド「終了日」がうるう年の2/28だった場合に、ボタンを押した時に警告のメッセージが出るようにしたいです。
- 現在、終了日を更新した時にメッセージが出るようにしていますが、ボタンの方でも同様のチェックを行いたいです。
- マウスボタン解放時のイベントに警告メッセージのコードを入れたところ、エラーが発生しました。具体的には、実行時エラー'2185'が発生しました。どこを修正すれば良いか教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
http://www.accessclub.jp/property/event/Click.html 上記にボタンをクリックするときのイベント順序が かいてあります。つまり、 MouseDown ⇒ MouseUp ⇒ Click ⇒ DblClick ⇒ MouseUp ⇒ Click の順序で起りますから、MouseUp ⇒ Click なので、 先にMouseUpが拾われてClickイベントが無視されてしまいます。 したがって、No2のような方法か、あるいは、 Call Ctl_新_証書新規_Click をマクロの呼び出しのかわりに入れます。以下のように。 Private Sub Ctl_新_証書新規_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Const cMsg = "うるう年ですけど、2/29じゃなくて大丈夫ですか?" Me.終了日.SetFocus If Format(Me.終了日.Text, "mdd") = "228" And _ IsLeapYear(Year(Me.終了日.Text)) Then If MsgBox(cMsg, vbYesNo) = vbNo Then Exit Sub Else MsgBox "レポートを開きます" Call Ctl_新_証書新規_Click End If End If End Sub
その他の回答 (2)
- piroin654
- ベストアンサー率75% (692/917)
以下ではどうですか。 Private Sub Ctl_新_証書新規_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Const cMsg = "うるう年ですけど、2/29じゃなくて大丈夫ですか?" Me.終了日.SetFocus If Format(Me.終了日.Text, "mdd") = "228" And _ IsLeapYear(Year(Me.終了日.Text)) Then If MsgBox(cMsg, vbYesNo) = vbNo Then Exit Sub Else MsgBox "レポートを開きます" 'ここにレポートを開くマクロ名を記述 End If End If End Sub
- piroin654
- ベストアンサー率75% (692/917)
>コントロールがフォーカスを取得していない時に、 >コントロールのプロパティまたはメソッドを参照することはできません。 ならば、フォーカスを移せばいいのでは。 Me.終了日.SetFocus If Format(Me.終了日.Text, "mdd") = "228" And _ それから、 >Cancel = True これはエラーが出ます。プロシージャの引数にCancelが 設定されていません。変数扱いになります。変数宣言も されていないのでエラーが出る、ということになります。 If MsgBox(cMsg, vbYesNo) = vbNo Then 'Cancel = True End If >Cancel = True のかわりに、 Exit Sub あるいは、 Me.Undo Exit Sub のような感じですか。
補足
回答ありがとうございます。 メッセージは出るようになりましたが、「はい」の場合、「クリック時」に入れているマクロでレポートを開きたいのですが、開きませんでした。 レポートを開くマクロには「レコードの保存」、「レポートを開く(クエリでフィルタ)」が入っています。 宜しくお願いいたします。
お礼
解決しました。ありがとうございます! マクロを呼び出すというのがヒントとなりました。 ボタンを押してレポートを開くマクロの中に、”終了日にフォーカスを移動する”を追加し、 終了日の方はフォーカス喪失時にセットしたらうまくいきました。 基本的にうるう年なのに2/28になることは”ほぼ”ありえないので、この挙動で大丈夫でした。 ありがとうございました。