• ベストアンサー
  • 困ってます

VBA 制限時間を、一時停止させたい

Excel VBAでの質問です。Excel2007使用です。 ユーザーフォームに制限時間と、制限時間を一時停止させるコマンドボタンを作りたいです。制限時間(60分)は、下ので実行できたのですが、一時停止ができるか、わかりません。 Private Sub 制限時間_Click() Dim myTime As Date Dim myLImit As Date myLImit = Now + TimeValue("1:00:00") Do While myLImit > Now DoEvents myTime = myLImit - Now 分表示.Caption = Minute(myTime) & "分" 秒表示.Caption = Second(myTime) & "秒" Loop msgbox "終了です。" Unload Me End Sub できれば、ボタンを押すとmsgbox"一時停止"を表示させ、表示させている間は、制限時間を一時停止させたいです。制限時間、一時停止ができれば、違うコードでもかまいません。 どうぞよろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数905
  • ありがとう数1

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

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

時間を一時的に止めるだけでしたら、以下のコードで行うことができると思います。 Private diffTime As Date Private Sub Command1_Click() Dim StartTime As Date StartTime = Now MsgBox "一時停止" diffTime = Now - StartTime End Sub Private Sub 制限時間_Click() Dim myTime As Date Dim myLImit As Date myLImit = Now + TimeValue("1:00:00") Do While myLImit > Now DoEvents myLImit = myLImit + diffTime myTime = myLImit - Now diffTime = 0 分表示.Caption = Minute(myTime) & "分" 秒表示.Caption = Second(myTime) & "秒" Loop MsgBox "終了です。" Unload Me End Sub

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 無事に制限時間、一時停止ができました。 ありがとうございました。とても助かりました。

関連するQ&A

  • VBAのOnTimeの停止について

    下記コードで右上の×ボタン(エクセルアプリではなくbookを閉じる×です)でCLOSEした場合は停止されるのですが、 ThisWorkbook.Closeで閉じた場合MsgBox "timer cxl"は呼ばれるのですがタイマーがキャンセルできず10秒後に閉じたbookが勝手に開かれMsgBox "chk"が呼ばれてしまいます。 エクセルは2003、WIN10です。 どなたか何か原因や回避策があればご教授お願い致します。 //標準モジュール Public timer As Date Public timerFlag As Boolean Sub chk() timerFlag = False MsgBox "chk" End Sub //ThisWorkbook Private Sub Workbook_Open() timer = Now + TimeValue("00:00:10") timerFlag = True Application.OnTime timer, "chk" MsgBox "open" End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) If timerFlag Then Application.OnTime timer, "chk", , False MsgBox "timer cxl" End If MsgBox "close" End Sub

  • Excelでタイマーの一時停止するボタンのコードは

    Excelでタイマーを作ったけど、一時停止できないとやっぱ面白くないと気づき、一時停止機能を付け加えたいが、まだ勉強し始めたばかりなので自分でコードが書けません。 なので、一時停止させるコードがわかる方教えてください。 <タイマーのコード> Sub タイマー() Dim EndTime Dim PassTime EndTime = Timer + Range("D5").Value * 60 + Range("F5").Value Do PassTime = Timer Range("D5").Value = (EndTime - PassTime) \ 60 '分 Range("F5").Value = (EndTime - PassTime) Mod 60 '秒 DoEvents Loop Until EndTime - PassTime <= 0 Beep MsgBox "時間です" End Sub

  • 一時停止ボタンが消えた

    動画を見ていて一時停止しようと思ったら停止ボタンなども含めボタン表示が無くなっていました。 その近くをなぞったらミュートと表示されたのでクリックしたら音声がストップしてしまいました。 どうしたらまた表示されますかお教えください。

  • VBAで指定時刻まで一時停止するコード

    VBA初心者です。 業務で使用するため、VBAで指定時刻まで一時停止するコードを作りたいのですが、うまくいきません。 設定したい条件は (1)当日の午前9時から実行 (2)記述しているコードの実行が終了したら、当日の午後6時まで一時停止 (このとき他の業務でExcelを使用するので、Excelの動作を止めないためにDoEventsと記述してOSに制御を移しています) (3)当日午後6時になったら、コードの実行を再開する 以上です。 今のところ、午後6時まで動作が停止せず、すぐに午後6時以降に実行したいコードが実行されてしまいます。 どういうコードを記述すればいいでしょうか?教えてください。 ------------------------------------------------------------------------------------------------------------------ &#65374;(中略)&#65374; Dim PauseTime As Single Dim Start As Variant Dim Finish As Date Dim TotalTime As Variant Start = Now() Do PauseTime = Start + TimeValue("08:59:20") DoEvents Loop While Now() < Finish Finish = TimeValue("18:00:03") &#65374;(中略)&#65374; ------------------------------------------------------------------------------------------------------------------

  • vba 初心者

    Dim a As Integer Dim inbox As String Dim Localpath As Variant Dim c As Range, myFadd As String Dim flag As Variant Dim MyShell As Object Dim Mysh As String Dim newHour As Variant Dim newMinute As Variant Dim newSecond As Variant Dim waitTime As Variant Localpath = ThisWorkbook.Path a = 1 inbox = InputBox("番号") Do If inbox = Empty Then Exit Sub End If If inbox = Cells(a, 1) Then MsgBox ("あります") Exit Do Else a = a + 1 ElseIf Cells(a, 1) <> inbox Then MsgBox ("ない") End If Loop Set MyShell = CreateObject("WScript.Shell") MyShell.Run ("AcroRd32.exe /n") MyShell.Run ("AcroRd32.exe /p") & Localpath & "\" & Myfile & ".pdf" newHour = Hour(Now()) newMinute = Minute(Now()) newSecond = Second(Now()) + 10 waitTime = TimeSerial(newHour, newMinute, newSecond) Application.Wait waitTime Application.SendKeys "{Enter}", True '次の使用例は、10 秒を過ぎるとメッセージを表示します。 If Application.Wait(Now + TimeValue("0:00:10")) Then MsgBox "時間が過ぎました。" End If End Sub ExcelからPDFファイルを検索して印刷したいのですが、 見よう見まねで作ってみたもののエラーが出てしまってよく分かりません。 指摘できるところご指導よろしくお願いします。

  • vba初心者

    いつもお世話様です。 A列にあらかじめデータを入れといてinboxでデータを検索してもしあったらPDFファイルを開いて印刷でもしデータがなかったらinboxに戻るかたちにしたいんですけど、do...loopの使い方が分からないのと、デバックがでてしまってどう直せばいいかわかりません。サンプルコードがあれば助かります。よろしくお願いします。 Dim a As Integer Dim inbox As String Dim Localpath As Variant Dim c As Range, myFadd As String Dim flag As Variant Dim MyShell As Object Dim Mysh As String Dim newHour As Variant Dim newMinute As Variant Dim newSecond As Variant Dim waitTime As Variant Localpath = ThisWorkbook.Path a = 1 inbox = InputBox("番号") Do If inbox = Empty Then Exit Sub End If If inbox = Cells(a, 1) Then MsgBox ("あります") Exit Do Else a = a + 1 ←ここでデバックがでてしまいます。 ElseIf Cells(a, 1) <> inbox Then MsgBox ("ない") End If Loop Set MyShell = CreateObject("WScript.Shell") MyShell.Run ("AcroRd32.exe /n") MyShell.Run ("AcroRd32.exe /p") & Localpath & "\" & Myfile & ".pdf" newHour = Hour(Now()) newMinute = Minute(Now()) newSecond = Second(Now()) + 10 waitTime = TimeSerial(newHour, newMinute, newSecond) Application.Wait waitTime Application.SendKeys "{Enter}", True '次の使用例は、10 秒を過ぎるとメッセージを表示します。 If Application.Wait(Now + TimeValue("0:00:10")) Then MsgBox "時間が過ぎました。" End If End Sub

  • Excelのontimeについて

    a1に数式が入っています。 c3からd3,e3,f3…に一定時間ごとにa1の値を入力するマクロがあります。 Sub 入力() Sheets("Sheet1").Select Range("a3").End(xlToRight).Offset(0, 1).Select ActiveCell.Value = Cells(1, 1).Value End Sub Sub スタート() Dim MyTime As Date Dim Jikan As Date Dim i As Integer Jikan = TimeValue("13:59:00") For i = 0 To 5 MyTime = Jikan + TimeSerial(0, 0, 5) * i Application.OnTime MyTime, "入力" Next End Sub で、教えていただきたいのですが、"入力"を動かしている途中で 上記のマクロをとめるにはどうしたらよいのでしょう? ご教授ください。

  • VBA 標準モジュールとフォーム

    ある標準モジュール内で生成した変数の値をフォームのコマンドボタンをクリックしたら表示されるプログラムはどうやってつくるのですか? 標準モジュール sub test() dim a as integer dim b as integer dim sum as string a=5 b=1 sum=a+b End sub フォームのコマンドボタンクリック Sub CommandButton1_Click() MsgBox sum End Sub 標準モジュールで計算した答えがフォームのコマンドボタンをクリックしたら答え6が表示されるようにしたいのですが、どうしたらできますか?

  • エクセルのVBAについて。

    エクセルのVBAのことは全く分かりませんが、他人の書いたVBAを使わせてもらい、自動で一定の間隔ごとに私が記録したマクロを動すようにしています。 そこで質問なのですが、午前8時00から、午前2時00まで5分おきに動かしたいのですが、日付が変わると動作しなくなってしまいます。どこが悪いのでしょうか? Option Explicit Dim mcolTask As Collection Sub 実行予約() Dim i As Date Dim strProcName As String Dim datBigin As Date Dim datEnd As Date Dim datInterval As Date Dim datTimeout As Date Dim blnJustTime As Boolean ' Setting------------------------------------------------------- datBigin = TimeValue("08:00:00") ' 開始時刻 datEnd = TimeValue("02:00:00") ' 終了時刻 datInterval = TimeValue("00:05:00") ' 実行間隔(少なくとも数秒以上で) datTimeout = TimeValue("00:02:00") ' 実行待機タイムアウト blnJustTime = True ' datInterval で丸めるか strProcName = "MACRO1" ' 実行するマクロ名 '--------------------------------------------------------------- ' 既に実行予約されているか確認 If mcolTask Is Nothing Then ' 日付シリアル値を加算 datBigin = datBigin + Date datEnd = datEnd + Date ' 終了時刻が開始時刻より小さければ日をまたぐので補正 If datEnd < datBigin Then datEnd = datEnd + 1 ' 現在時刻が既に終了時刻を過ぎている場合 If datEnd < Now() Then MsgBox "終了時刻を過ぎているため予約できません。", vbCritical, "終了" Exit Sub End If ' 現在時刻が開始時刻を過ぎていれば補正 If datBigin < Now() Then ' 開始時刻を datInterval で指定された値で丸めるか If blnJustTime Then datBigin = Application.Floor(Now() + datInterval, datInterval) Else datBigin = Now() + datInterval End If End If ' 初期化 Set mcolTask = New Collection ' メイン部分 For i = datBigin To datEnd Step datInterval ' 後から取り消せるようにコレクションに退避 mcolTask.Add CStr(i) & "," & strProcName ' Application.Ontime で実行予約を行う Application.OnTime EarliestTime:=i, _ Procedure:=strProcName, _ LatestTime:=i + datTimeout, _ Schedule:=True Next i Else MsgBox "既に実行中です", vbInformation End If End Sub

  • vba 明日の6時まで、あと何時間何分あるか

    vba 今の時間から明日の6時まで、あと何時間何分あるかを取得したいのですが うまくいきません。 Sub a() Const 予定 As Date = "06:00:00" '明日の6時 MsgBox "明日の6時まであと" & Format(Now - 予定, "hh:mm") & "あります" End Sub これだと、今の時刻(21:51)で実行すると15:51が返ります。 でも明日の6時まで15時間51分もないです。 何がまちがってますか?