ExcelでXX秒ごとに何かの処理をしたい時
Application.OnTimeというメソッドが使えます。初めて知りました。
やりたかったのは、
- XX秒毎に、オリジナルのExcelシートの一部を値コピーして別ファイルに保存
- 作られる別ファイル名には保存された日時を秒単位で付加して区別できるようにする
- スケジュール実行の間隔は簡単に変えられる
というものです。手作業だと面倒でやってられないです。
以下、マクロの中身
Sub Macro1() ' ' Macro1 Macro ' ' Range("A2:M17").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A1").Select Sheets("Sheet2").Copy mydt = Format(Now, "yyyymmdd-hhnnss") newfn = ThisWorkbook.Path + "\" + Split(ThisWorkbook.Name, ".")(0) + "-" + mydt + ".xls" ActiveWorkbook.SaveAs Filename:= _ newfn, FileFormat:= _ xlExcel8, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _ , CreateBackup:=False ActiveWindow.Close Sheets("Sheet1").Select Range("A1").Select Schedule End Sub Sub Schedule() TargetTime = Now + TimeValue(Range("A1").Value) Application.OnTime TimeValue(TargetTime), "Macro1" End Sub
A1のセルに"00:00:05"とかいれておくと、5秒ごとにMacro1が走ります。
ただ、このスケジュールを止める方法がわからなくて、今のところExcelを閉じるしか有りません。Falseを指定すると直前のをキャンセルする、らしいのですが、「'OnTime'ソメッドは失敗しました。'_Application"オブジェクト」というエラーになります。よくわからないのでExcel閉じてやってます。