• ベストアンサー

access2010/ポップアップ/自動カウント

access2010を使用しています。 ポップアップで『10秒後に処理を開始します。』OKボタン、cancelボタン を表示したいと考えています。その後、 ポップアップを何もボタンを押下しなければ、自動的にマクロを実行したいです。 OKボタンを押せばすぐに処理が開始されます。 cancelボタンを押すと、処理は何もしません。 10秒は正確でなくても問題ありません。 Sleep (1000)等で1秒毎にカウントダウンし、それをForで繰り返し実行すれば出来そうですが、 ポップアップを表示しているときにそれが可能でしょうか? ご教授お願いします。

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

  • ベストアンサー
回答No.6

バグ2:フォームは DoCmd.closeで閉じます。非表示にしても無意味でした。

その他の回答 (5)

回答No.5

補足:フォームが開かれているか否かを調べて真または偽を返します。 Public Function FormIsLoaded(ByVal frmName As String) As Boolean On Error Resume Next   FormIsLoaded = CurrentProject.AllForms(frmName).isLoaded End Function ? FormIsLoaded("フォーム1") True *お断りだけでは無責任なので・・・。 *Access2010ではテストしていません。

回答No.4

訂正: If Forms("フォーム2").Visible Then これはミスです。 フォームが表示されているか否かを判定は別の方法で行う必要があります。 あるいは、エラートラップでマクロの実行を飛ばすか・・・。 訂正しておきます。

回答No.3

以下の関数とコードは、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

回答No.2

『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

回答No.1

Access ならフォームのタイマー時イベントを使うと簡単です。 フォームプロパティのイベントタブの「タイマー間隔」を、10000 に設定します(ミリ秒単位)。 「タイマー時」のイベントプロシージャを下記のように記述します。 Private Sub Form_Timer() Me.TimerInterval = 0 'タイマー停止 DoCmd.RunMacro "マクロ名" DoCmd.Close End Sub Okボタンのクリック時も同じコードを記述。 Cancelボタンは、 DoCmd.Close だけでいいでしょう。

関連するQ&A