- ベストアンサー
access2010/ポップアップ/自動カウント
access2010を使用しています。 ポップアップで『10秒後に処理を開始します。』OKボタン、cancelボタン を表示したいと考えています。その後、 ポップアップを何もボタンを押下しなければ、自動的にマクロを実行したいです。 OKボタンを押せばすぐに処理が開始されます。 cancelボタンを押すと、処理は何もしません。 10秒は正確でなくても問題ありません。 Sleep (1000)等で1秒毎にカウントダウンし、それをForで繰り返し実行すれば出来そうですが、 ポップアップを表示しているときにそれが可能でしょうか? ご教授お願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
バグ2:フォームは DoCmd.closeで閉じます。非表示にしても無意味でした。
その他の回答 (5)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
補足:フォームが開かれているか否かを調べて真または偽を返します。 Public Function FormIsLoaded(ByVal frmName As String) As Boolean On Error Resume Next FormIsLoaded = CurrentProject.AllForms(frmName).isLoaded End Function ? FormIsLoaded("フォーム1") True *お断りだけでは無責任なので・・・。 *Access2010ではテストしていません。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
訂正: If Forms("フォーム2").Visible Then これはミスです。 フォームが表示されているか否かを判定は別の方法で行う必要があります。 あるいは、エラートラップでマクロの実行を飛ばすか・・・。 訂正しておきます。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
以下の関数とコードは、1995年に書いたものです。そのことを承知の上で、適当に参考にされて下さい。 Private Sub コマンド1_Click() DoCmd.OpenForm "フォーム2", , , Null Pause 10 If Forms("フォーム2").Visible Then Forms("フォーム2").Visible = False MsgBox "マクロを実行します。" End If End Sub 10秒後に"フォーム2"が表示されていれば、MsgBoxの行に書かれているコード(マクロを実行)を実行します。 【標準モジュール】 Public Sub Pause(ByVal PauseTime As Single) Dim Finish As Single Finish = Timer + PauseTime Do DoEvents Loop Until Timer > Finish End Sub
- hatena1989
- ベストアンサー率87% (378/433)
『10秒後に処理を開始します。』というラベルが配置してあり、それをカウントダウンするなら、 ラベル名を lblMsg として、 「タイマー間隔」を、1000 に設定して、 Private Sub Form_Timer() Static cnt As Long cnt = cnt + 1 Me.lblMsg.Caption = CStr(10 - cnt) & "秒後に処理を開始します。" If cnt = 10 Then Me.TimerInterval = 0 'タイマー停止 DoCmd.RunMacro "マクロ名" DoCmd.Close End If End Sub
- hatena1989
- ベストアンサー率87% (378/433)
Access ならフォームのタイマー時イベントを使うと簡単です。 フォームプロパティのイベントタブの「タイマー間隔」を、10000 に設定します(ミリ秒単位)。 「タイマー時」のイベントプロシージャを下記のように記述します。 Private Sub Form_Timer() Me.TimerInterval = 0 'タイマー停止 DoCmd.RunMacro "マクロ名" DoCmd.Close End Sub Okボタンのクリック時も同じコードを記述。 Cancelボタンは、 DoCmd.Close だけでいいでしょう。