VBA指定時刻に転記保存
指定した時刻にほかのマクロが起動していると、OnTimeメソッドで指定したマクロを実行できません。
a = Workbooks("●●●.xlsm").Worksheets("Sheet1").Range("F165").Value
Workbooks.Open Filename:="C:\Users\●●●\Desktop\マクロ\●●●.xlsx"
Sheets("Sheet2").Select
ActiveCell.Select
ActiveCell.FormulaR1C1 = a
ActiveCell.Offset(0, 1).Select
Workbooks("●●●.xlsx").Worksheets("Sheet2").Cells(3, i + 1) = Now()
i = i + 1
next_time = Now() + TimeValue("00:00:15")
Application.OnTime EarliestTime:=next_time, Procedure:="macro1"
End Sub
↑
元になる15秒繰り返し転記
Sub owarine()
a = Workbooks("●●●.xlsm").Worksheets("Sheet1").Range("F165").Value
Workbooks.Open Filename:="C:\Users\●●●\Desktop\マクロ\●●●.xlsx"
Sheets("Sheet2").Select
Workbooks("●●●.xlsx").Worksheets("Sheet2").Cells(i, 1) = a
i = i + 1
https://tech-draft.net/programming/vba-ontimer/
Application.OnTime EarliestTime:=TimeValue("15:00:01"), Procedure:="owarine"
End Sub
問題は15秒間隔も同時に動いている。取得するデータ自体は同じ。
従って15秒間隔のやつを15時に終了させて閉じる上書き保存のほうがいいのでは?
いずれにせよApplication.OnTime実行からの解除や停止はなんだかめんどくさい。
指定時間に停止ボタンをクリックさせるプロシージャを追加したほうがいいのかもしれない。
そしてさらに指定時間で終値記録させる。
指定時刻に転記保存失敗例
とりあえず終値記録のみをつくってみよう↓以下では動かない
a = Workbooks("●●●.xlsm").Worksheets("Sheet1").Range("F165").Value
Workbooks.Open Filename:="C:\Users\●●●\Desktop\マクロ\●●●.xlsx"
Sheets("Sheet2").Select
Workbooks("●●●.xlsx").Worksheets("Sheet2").Cells(i, 1) = a
i = i + 1
next_time = Now() + TimeValue("00:00:15")
Application.OnTime EarliestTime:=TimeValue("15:00:01"), Procedure:="owarine"
End Sub
デバッグしてみる F8連打でもよい
なにをやっても動かない。マクロ自体動いてない? イミディエイトウィンドウで実行してチェックする
以下で動いた
a = Workbooks("転記元.xlsm").Worksheets("Sheet1").Range("G163").Value
Workbooks.Open Filename:="C:\Users\malis\Desktop\マクロ\転記先.xlsx"
Sheets("Sheet1").Select
ActiveCell.Select
ActiveCell.FormulaR1C1 = a
ActiveCell.Offset(0, 1).Select
Application.OnTime TimeValue("17:59:01"), Procedure:="owarine"
End Sub
しかし、エラーがでる。
エラー1004が出たのは複数原因があるようだが、指定したセルの値が不明になっていた(楽天RSSが動いてなかったので)というのも一因にあるようだ。
指定セルを変更(値の入っている)したところ動く。
ということでこのプロシージャにファイルを上書き保存させるコードを付け加える。
いずれにしろ上書き保存させていれば手動でファイルを閉じてもかまわんが。
しかしhttps://www.sejuku.net/blog/68226でやっても動かない。
Application.DisplayAlerts
確認メッセージを非表示にする(DisplayAlertsプロパティ)
Application.DisplayAlertsは保存して閉じるまでの処理を囲む必要がある。
とはいえまたエラーがでる。
エラー番号91がでたのでどうやらワークブックにsetをつけてないのでよくないようだ
指定時間に特定のセルから別ワークブックに転記し、上書き保存閉じるまでのVBA完成
Dim 転記先ファイル As Workbook
a = Workbooks("転記元.xlsm").Worksheets("Sheet1").Range("F165").Value
Workbooks.Open Filename:="C:\Users\●●●●●\Desktop\●●●\ファイル名.xlsx"
Sheets("Sheet1").Select
ActiveCell.Select
ActiveCell.FormulaR1C1 = a
ActiveCell.Offset(0, 1).Select
Application.DisplayAlerts = False
Set 転記先ファイル = ActiveWorkbook
転記先ファイル.Save
転記先ファイル.Close
Application.DisplayAlerts = True
Application.OnTime TimeValue("15:00:01"), Procedure:="プロシージャ名"
End Sub