- ベストアンサー
ボタンの色変化を確認する時間を持たせたいのですが。
Access2000を勉強(Windows XPで)しています。ラベルでボタンを作成し、クリックイベントプロシージャでバックカラーを変化させた上で、「マウスボタンクリック時」のマクロを働かせるのですが、バックカラーの変化は一瞬でよく見えません。色変化の確認時間をとって、次のマクロへ進ませるにはどうしたらよいでしょうか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
マクロ変換が出来たら、こんな風かと思います。 Label1 を ラベル0に読み替えて下さい Private Sub Label1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim oldColor As Long oldColor = Me!Label1.BackColor '元の色を記憶 Me!Label1.BackColor = 10092543 '淡黄色 '色変え処理が働くように、Sleep や mywaitM の前にDoevents を入れて '置けば大丈夫かと思います。一応試しましたので。 'DoEvents 'Sleep 1500 DoEvents myWaitM (1.5) Me!Label1.BackColor = oldColor '元の色に戻す MsgBox "おまたせ" '実際の処理の代わり End Sub
その他の回答 (4)
- nicotinism
- ベストアンサー率70% (1019/1452)
どの辺まで行ったのかな? どないしてもアカン!となったらモジュールを全部アップしてみて下さい。 今、私のほうで疑問なのはフォームを開く前後になぜクエリ(選択クエリですよね)で挟んでいるのかという点。 これの理由も含めてアップして下さい。 ※お礼欄はレス一回に付き一度しか使えない此処のサイトは貧弱なシステムかとは思いますが それを言っても始まらないので、繰り返しになりますが壁にぶち当たってから投稿して下さい。
お礼
再三のご指導ありがとうございました。おかげさまで意のとおりになり次へ進めます。要らないクエリ呼び出しは削除しました。すっきりしました。また壁にぶつかりましたらよろしくご指導お願いいたします。
- nicotinism
- ベストアンサー率70% (1019/1452)
話を端折ってしまったようで分かりづらかったですね 'ミリセカンドで停止 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ↑を標準モジュールにコピペ ラベルのクリック時イベントに 色変え処理 Sleep 1000 ’1秒待機 次の処理 -------------この上のものは、WindowsAPIを使用して待機させる場合です。 下の場合はAPIを使用してはいませんので、下の方法でしたら >'ミリセカンドで停止 >Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) この宣言は削除してもらってかまいません。 Dim T as single 色変え処理 T = Timer + 1.5 '1.5秒待機 Do until Timer > T Doevents Loop 次の処理 さて、マクロで処理されているとの事ですので、 下記を丸ごと標準モジュールにコピペ Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Function myWaitA(waitTime As Long) Sleep waitTime End Function Function myWaitM(waitTime As Single) Dim T As Single T = Timer + waitTime 'waitTime秒待機 Do Until Timer > T DoEvents Loop End Function マクロ(検索処理)の先頭に一行追加して、そこに プロシージャの実行 とし、 プロシージャ名には、= mywaita(1500) か = mywaitm(1.5) とすれば指定時間だけ待機出来るかと思います。 どちらか好きなプロシージャ名を使ってください。 >マクロ変換で検索処理操作文を書き込むのでしょうか。 マクロを使わずに全てプロシージャで処理する場合には・・。 その場合にはとりあえずマクロからプロシージャに変換し終えたら その部分のところをアップしてもらえますか? ツール → マクロ → Visual Basic に変換で出来ると思います。 なお補足欄に書かれても気がつかないことがあります。 お礼欄ですと自動的にメールが入りますので助かります。
お礼
丁寧なご指導恐縮しております。ありがとうございます。 ご指示どおり「Declare Sub ・・・」以下丸ごと標準モジュールにコピペ。 マクロ(検索処理)の先頭に一行追加して、「= mywaita(1500)」プロシージャとして実行することにしました。結果、うまく検索処理は待ち時間をとって処理することができました。しかし、当初の「黒」ボタンに変化はなく、検索処理後元へ戻すとボタンの色が変わっています。つまり、色変化しないで時間をとって検索処理、その後色変化しているようです。なお、ラベルクリック時イベントには→Me![ラベル0].BackColor=10092543 '淡黄色 とのみ記述しています。 マクロのプロシージャ変換はまだやっていませんので、しばらく時間をくださいませ。経過まで。
- nicotinism
- ベストアンサー率70% (1019/1452)
VBAですけど。 'ミリセカンドで停止 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ↑を標準モジュールにコピペ ラベルのクリック時イベントに 色変え処理 Sleep 1000 ’1秒待機 次の処理 とか Dim T as single 色変え処理 T = Timer + 1.5 '1.5秒待機 Do until Timer > T Doevents Loop 次の処理 など
補足
ご回答ありがとうございます。 標準モジュールにご教示文をコピペし、ラベルのクリック時イベントに Dim T as single Me![ラベル0].BackColor = 10092543 '淡黄 と色変え処理を書き込み、1.5秒待機タイマー処理を続けて書き込んで見ました。 ”次の処理”は、「マウスボタンクリック時」のマクロ(検索処理)を働かせるのですが、うまくいきません。「DoEvents」文がまずいのでしょうか。DoEventsの次にマクロ変換で検索処理操作文を書き込むのでしょうか。お教えください。
- zap35
- ベストアンサー率44% (1383/3079)
waitメソッドで処理の待ち合わせが可能です HELPでwaitを検索してみて下さい
補足
回答いただきありがとうございます。 HELPでwaitを検索してみていますが、やり方がまずいのか該当のものが出てまいりません。処理も含めて、再度ご教示ください。
お礼
早々のご指導本当にありがとうございます。 検索処理マクロをVisual Basic変換すると、 Option Compare Database '------------------------------------------------------------ ' J・シュトラウス '------------------------------------------------------------ Function J・シュトラウス () Call myWaitM(1.5) DoCmd.OpenQuery "クラシック", acNormal, acEdit DoCmd.OpenQuery "QH_J・シュトラウス", acNormal, acEdit DoCmd.OpenQuery "QT_J・シュトラウス", acNormal, acEdit DoCmd.OpenForm "F_J・シュトラウス", acNormal, "", "", , acNormal DoCmd.Maximize DoCmd.Close acQuery, "クラシック" DoCmd.Close acQuery, "QH_J・シュトラウス" DoCmd.Close acQuery, "QT_J・シュトラウス" End Function となりました。 変換後のセンテンスの前にご教示の文を置いて試行はまだしていません。よろしくお願いいたします。申し訳ありません。