• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ユーザーフォームを起動しながらタイマーのマクロを動かしたい)

ユーザーフォームとタイマーのマクロを組み合わせて動かしたい方法

このQ&Aのポイント
  • ユーザーフォームとタイマーのマクロを組み合わせて、ユーザーフォームが開かれている状態でも特定の時間にメールを送信する方法を教えてください。
  • 現在、ユーザーフォームで入力したデータを各セルに入れてVBAを書いていますが、同時にタイマーのマクロを起動させる方法がわかりません。
  • ユーザーフォームが開かれている状態でタイマーのマクロを動作させることはできるのでしょうか?また、不定期なタイマーの処理方法も教えてください。

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

  • ベストアンサー
  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.1

Ontimeの呼び出し先を次のようにしてください。 Public Sub SendMail() UserForm1.Hide 'sendmail UserForm1.Show End Sub >>不定期なタイマーの方法<< どんなことをイメージしているのかわからないのですが 変数で指定するだけでいいと思いますが・・・   dim tm as string  tm= 'textboxなどから取得  指定時刻 = TimeValue(tm)

micazroom
質問者

お礼

早い回答ありがとうございます! Hideなんてワザがあったんですね(笑) ユーザーフォームを閉じるのはUnloadばかりしていてそれで閉じると入力情報も消えていたので助かりました! 不定期なタイマーは、例えば13時、14時、16時、19時、20時みたいに規則性のない時間でメールを送信(マクロ起動)をしたいのです。 時間は外部からではなく、設定しときたいのです。 現段階でその不定期な時間が決まってないのですが、これから決まるので先に作っときたいのです。 一つのマクロで実現は可能ですか? よろしければ再度回答お願いします!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>不定期なタイマーは、例えば13時、14時、16時、19時、20時みたいに規則性のない時間でメールを送信(マクロ起動)をしたいのです。 >時間は外部からではなく、設定しときたいのです。 Sub SendMail() Dim v As Variant, i As Long '・・・・ '・・・・ '・・・・ v = Array(TimeValue("07:30:00"), TimeValue("13:00:00"), TimeValue("14:00:00"), _ TimeValue("16:00:00"), TimeValue("19:00:00"), TimeValue("20:00:00")) For i = LBound(v) To UBound(v) If v(i) > Time Then Exit For Next If i > UBound(v) Then i = LBound(v) Application.OnTime v(i), "SendMail", TimeValue("00:01:00") End Sub

micazroom
質問者

お礼

回答していただいてありがとうございました。 昨日、動くかテストしてみたのですが、一つ目の時間は動くのですがそれ以降が動きませんでした。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルのマクロのタイマー機能について

    エクセルのマクロのタイマー機能について エクセルのマクロで指定した時間ごとにURLをクリックするマクロを作っています。 下記のように作っていますが、もっと簡略化して短い記述にしたく思います。 URLと指定時間は別のマクロで生成して、URLはA1~A49まで、指定時間はB1~B490までセルに書きこむようにしています。 URLはA49まで読んだらA1から読み直して10往復して、490回使用します。 使用するセルを一回ごとにずらしていくだけなので、簡単に出来そうな気もしますが、マクロ初心者のためわかりません>< 恐れ入りますが、ご教授いただければ幸いです。 ちなみにエクセル2007で作成しています。 Sub 一定の時間間隔でマクロを実行する() '進捗状況を示すために準備する 指定時刻 = Now + TimeValue("0時00分05秒") 待ち時間 = TimeValue("0時00分01秒") Application.OnTime TimeValue(指定時刻), "新規01", TimeValue(待ち時間) End Sub Sub 新規01() Range("A1").Select 'A列のURLを取得 Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True 指定時刻 = Now + Range("B1").Value 'B列の時間を取得 待ち時間 = TimeValue("0時00分01秒") Application.OnTime TimeValue(指定時刻), "新規02", TimeValue(待ち時間) End Sub Sub 新規02() Range("A2").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True 指定時刻 = Now + Range("B2").Value 待ち時間 = TimeValue("0時00分01秒") Application.OnTime TimeValue(指定時刻), "新規03", TimeValue(待ち時間) End Sub         ↓    同様の記述を490回繰り返す         ↓ Sub 新規建設490() Range("C1").Value = Now & " 終了" End Sub Private Sub 進捗状況を示すために準備する() Cells.Clear Columns("A:A").NumberFormatLocal = "yyyy/m/d h:mm:ss" Range("A1").Select ActiveCell.Value = Now & " 開始       " Columns("A:A").EntireColumn.AutoFit End Sub

  • Excel2003 VBAでタイマーを組んでマクロを走らせたいのですが

    Excel2003 VBAでタイマーを組んでマクロを走らせたいのですが、以下のエラーメッセージが出ました。 マクロ "C:\aaa\Timer.xls'!Record1'が見つかりません。 マクロは、Timer.xlsブックのThisWorkbookに記述しています。 ---------------------------------------------------------------------- Sub timer1() 指定時刻 = TimeValue("09:00:00") 終了時刻 = TimeValue("11:00:00") Application.OnTime 指定時刻, "Record1" End Sub ---------------------------------------------------------------------- Sub Record1() Dim sh1, sh2 If TimeValue(Now) >= 終了時刻 Then '終了時刻になら終わる MsgBox "終了時刻になりました。" Application.CutCopyMode = False Exit Sub End If Set sh1 = Worksheets("1") Set sh2 = Worksheets("2") sh1.range("G5:G506").Copy 'コピー sh2.range("Q5:Q506").PasteSpecial Paste:=xlValues Selection.Offset(0, 2).Select '2行ずらす 指定時刻 = Now + TimeValue("00時05分00秒") '5分後 Application.OnTime 指定時刻, "Record1" End Sub ---------------------------------------------------------------------- どこを直せばよろしいのでしょうか? よろしくお願いします。

  • タイマーマクロの二重起動防止をしたい

    おねがいします。 Sub SetTimer() On Error Resume Next '時間変更注意 Application.OnTime TimeValue("00:00:30"), "強制終了" '時間変更注意 Application.OnTime TimeValue("00:10:00"), "SetTimer" '時間変更注意 Application.OnTime TimeValue("00:10:30"), "フォルダ作成" '時間変更注意 Application.OnTime TimeValue("23:52:00"), "プリント" '時間変更注意 Application.OnTime TimeValue("23:54:00"), "DB保存" '時間変更注意 Application.OnTime TimeValue("23:56:00"), "DBから日別保存へコピー" '時間変更注意 Application.OnTime TimeValue("23:58:00"), "表のクリア" UserForm16.Show End Sub 以上ののマクロを作成、実行します。 23時52分から一連の作業をして、0時10分に自ら次回のタイマー予約を踏むマクロです。 エクセルは、無人で24時間自動起動させています。 一番最初(ブックを開く)に、どのタイミングでスタートするかわからないので、 workbookプロシージャに workbook.openのタイミングで Call SetTimerを入れてあります。 印刷が二回発生して気付いたのですが、 このままだと、0時2分に再起動がかかり、ブックを開きなおします。 (SetTimer) で、0時10分に自己発動タイマーが働きますよね。(SetTimer二回目) すると、一連の作業は二重実行されてしまい、困ってます。 マクロ自身にフラグを持たせるんですか? なんとか、一度だけ実行をすることはできないんでしょうか? 教えてください。おねがいします。

  • ユーザーフォームの再起動

    ブックを開いたと同時に、自動でユーザーフォームをモードレス状態で起動させています。 このマクロ付Excelファイルを使用している開発タブなどを有効にしていないエンドユーザーがフォームを閉じてしまった場合に ファイルを再起動しないで、簡単にユーザーフォームを再表示させる方法はございますか?

  • ユーザーフォームについて

    エクセル2002です。 ユーザーフォーム内のテキストボックスを使用して、 (1)A1のセルに1と入力されている状態でマクロを起動した場合、 (2)ユーザーフォーム内のテキストボックスには2と表示される (3)ユーザーフォーム内のボタンを押すと、A2のセルに2と入力される。 このような流れで、A列のデータ最終行に番号をふっていきたいです。 (A列のデータ最終行がA30なら、A31に31と番号をふる) ユーザーフォームのテキストボックスとボタンは作ってあるのですが、 それぞれに入れるコードを教えていただけないでしょうか。 よろしくお願いします。

  • VBAのタイマー

    こんにちは VBAで、一日に一回起動するマクロを作ろうと思っています。 Sub timer() Dim settime As Variant Dim waittime As Variant settime = TimeValue("00:35:00") '指定時刻 waittime = TimeValue("00:01:00") settime = settime + waittime '指定時刻待ち時間 Application.OnTime TimeValue(settime), "sub" End Sub な感じなのですが、これだと一度起動すると二日目以降は動作しなくなります。 毎日起動するにはどうしたら良いものでしょうか

  • エクセル VBA タイマー 0:00:00で

    5分ピッチで 仕事させます。 ブックオープンで インターバル = TimeValue("00:05:00") Application.OnTime Format(開始時刻, "hh:mm:ss"), "orgdata.必要な作業を行うマクロ", 待ち時間 Debug.Print "st" & 開始時刻 Call timer_set 反復時刻 = 開始時刻 If Format(反復時刻, "hh:mm:ss") > "23:54:00" Then 反復時刻 = Format(DateAdd("d", 1, 反復時刻), "yyyy/mm/dd") & " " & TimeValue("0:00:10") Else 反復時刻 = Format(反復時刻, "yyyy/mm/dd") & " " & TimeValue(反復時刻) + インターバル End If ループで5回ほど Application.OnTime Format(反復時刻, "hh:mm:ss"), "orgdata.必要な作業を行うマクロ", 待ち時間 Debug.Print "loopexit" & 反復時刻 で、デバッグアウトが end 2013/08/15 3:02:00 st 2013/08/14 23:50:10 loop2013/08/14 23:55:10 loop2013/08/15 00:00:10 loop2013/08/15 00:05:10 loop2013/08/15 00:10:10 loopexit2013/08/15 00:15:10 makuro 2013/08/15 00:20:10 makuro 2013/08/15 00:25:10 makuro 2013/08/15 00:30:10 で、「必要な作業を行うマクロ」 で 仕事のあと タイマー追加します。 If Format(反復時刻, "hh:mm:ss") > "23:54:00" Then 反復時刻 = Format(DateAdd("d", 1, 反復時刻), "yyyy/mm/dd") & " " & TimeValue("0:00:10") Else 反復時刻 = Format(反復時刻, "yyyy/mm/dd") & " " & TimeValue(反復時刻) + インターバル ' End If Application.OnTime Format(反復時刻, "hh:mm:ss"), "必要な作業を行うマクロ", 待ち時間 (反復時刻を 時間だけの時 formatを 入れて・・・) Debug.Print "makuro " & 反復時刻 ’これが デバッグで出力されています。 で、ダミーの作業が clup = clup + 1 orgdata.Cells(clup, 10) = Format(Now, "yyyy/mm/dd") orgdata.Cells(clup, 11) = Format(Now, "hh:mm:ss") orgdata.Cells(clup, 12) = Format(反復時刻, "yyyy/mm/dd") orgdata.Cells(clup, 13) = Format(反復時刻, "hh:mm:ss") 結果 2013/8/14 23:50:10 2013/8/15 0:20:10 2013/8/14 23:55:10 2013/8/15 0:25:10 2013/8/15 0:00:10 2013/8/15 0:30:10 これで、タイマー作業が 途切れます。 0:00:00 超える事に 問題があるなら 0:00:10 は 実行されないハズ・・・・ 反復時刻は yyyy/mm/dd & ” ” & ”hh:mm:ss” です。 試しに 時刻だけでやっても 同じでした。 さて、如何でしょ? 実は これで、動いていたのですが、3日ほど前から 0:00以降 突然タイマーが動かなくなったのです PCは 3台 同じ現象です よって WINの設定では無い・ エクセル オプションに 何か設定でもあるのか?? どうも VBAのタイマーは不可解で エクセル終了させず、 プログラムだけ終了、再ロードだと、前のタイマー残ったまま、ダブルでタイマー動くとか・・・・ それと、WIN32とかの 別のタイマー使った方が 良いのでしょうか??

  • エクセルVBAのユーザーフォーム

    こんばんは、エクセルVBAでユーザーフォームを作成しました。 そこに入力したものがブックに反映するわけですが、フォームに0(ゼロ)を入力した場合、ブック上のセルを選択すると0と入っているのですが、表示されません。なぜでしょう???? これができないとせっかく時間をかけて作ったのに、使えません。どなたかご存知の方よろしくお願いします!!!!

  • Excelマクロにて、タイマーで自動更新は出来るのでしょうか?

    Excelマクロにて、タイマーで自動更新は出来るのでしょうか? Excelマクロの初心者です。 最近関数にて、時間の計算を行うbookを作成しましたが、 下記の様に手動で現時刻欄を更新している状態です。 (これは1カ所ですが、実際には複数箇所を行いたいです。) Sub 残り時間を更新() ' Range("C21").Select '現時刻欄を選択 ActiveCell.FormulaR1C1 = "=NOW()" '使用開始時刻欄に現時刻を再設定 Application.CutCopyMode = False End Sub これを別のマクロにくっつけて、例えば10分おき位に自動で 更新が出来る様な事は出来ますでしょうか? 理想は、セルに自動更新時間が任意に設定でき、その数字の基で タイマーが時間が決まり、実行ボタンでタイマー開始、停止ボタン で実行キャンセルといった、VB上では出来そうな事をExcel上 でも可能でしょうか? 良きアドバイスをいただきたいと思います。 よろしくお願いいたします。

  • 別ブックからユーザーフォームを実行したい~!!

    教えてください。 2つのブックを並べて表示してあります。 1つのブックでマクロを作成する過程で、もうひとつのブックで実行された ユーザーフォームのコマンドボタンを押したいのですが。。。。。 アクティブブックが移動しユーザーフォームが表示されるだけでボタンが押せないのです。 何かいい方法はないでしょうか。 ご回答お待ちしております。宜しくお願いいたします。