タグ:やってみた
  • VBA

指定した時刻にマクロを実行する(OnTimeメソッド)

指定した時刻にほかのマクロが起動していると、OnTimeメソッドで指定したマクロを実行できません。

Sub macro1()

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/

時間部分を変更する
next_time = Now() + TimeValue("00:00:15")

Application.OnTime EarliestTime:=TimeValue("15:00:01"), Procedure:="owarine"

End Sub

問題は15秒間隔も同時に動いている。取得するデータ自体は同じ。
従って15秒間隔のやつを15時に終了させて閉じる上書き保存のほうがいいのでは?

いずれにせよApplication.OnTime実行からの解除や停止はなんだかめんどくさい。
指定時間に停止ボタンをクリックさせるプロシージャを追加したほうがいいのかもしれない。
そしてさらに指定時間で終値記録させる。

指定時刻に転記保存失敗例

とりあえず終値記録のみをつくってみよう↓以下では動かない

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
next_time = Now() + TimeValue("00:00:15")

Application.OnTime EarliestTime:=TimeValue("15:00:01"), Procedure:="owarine"

End Sub

 

デバッグしてみる F8連打でもよい

なにをやっても動かない。マクロ自体動いてない? イミディエイトウィンドウで実行してチェックする
以下で動いた

Sub owarine()
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をつけてないのでよくないようだ

 

Set book1 = ActiveWorkbook のように付け加える。book1のところは保存するワークブック名になる。activeをつけていないと動かない。

 

指定時間に特定のセルから別ワークブックに転記し、上書き保存閉じるまでのVBA完成

Sub owarine()
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

備忘録です。

ビットフライヤーでビットコインを買うにはまず入金。
ペイジーで入金すると1週間送付できないので銀行から入金する。
住信SBIと三井住友銀行の口座があるので当該銀行から送れば即時反映。

 

ビットフライヤーでビットコインを買うには取引所が安い。
手数料はビットコイン表記になっているが円口座から自動で引き落とされる。が、
ビットコイン自体をエコペイズに送付する手数料が別途0.0004ビットコイン必要。
従って送付したいビットコイン量+0.0004ビットコインを取引所で買う。

エコペイズに入金するにはローカル入金のalternativeを選択し、入金したい額を入力するとビットコインアドレスが表示される。このアドレスは15分しか表示されない。
また、金額が自動的にビットコインの量が表示される。厳密にこの量を送付しなくても問題なく反映する。
エコペイズへ反映されると自動的に通貨に変換されている。

 

ちなみに5000円をビットフライヤーに入金し、最終的にウイリアム昼に入金できた金額は4200円。エコペイズ、ビットフライヤーに残った金額は合計約100円なので、700円ほど目減りしていることになる。
このうちビットフライヤーでの手数料は600円ほどなので、意外にエコペイズのビットコインから通貨への交換レートは悪くないようだ。

解約しなくても料金はかからないので別にいいんですが。
そういや、1年無料とは言え事務手数料はとられましたね。あれって楽天なんとかいうアプリを入れてどうたらこうたらでポイントが貰える仕様みたいで、結局開通処理すらできずじまいでしたから。
楽天モバイルで使えない機種が結構多いみたいでこれはいくら無料でも加入には躊躇してしまう。
だから加入者増えないんですよ。

最近老眼がひどい。
昔、近眼の人は老眼にならないと言われていたが、それが完全な俗説、都市伝説であったことを身をもって知った。
近眼なのでコンタクトをすると、今度は近くが見えないという・・・
そこでコンタクトをしたうえで老眼鏡をかけることになる。
遠近両用のめがねを購入したものの、めがね自体がどうもあわないので外にでるときは結局コンタクトとなる。が、出先で書類などを書く場合は老眼鏡がないとやばい状態になってきた。
書類だけならまだいいが、細かい文字だけではなく、結局のところ様々なものがはっきりと見えていないのである。
いずれにしろ、常に老眼鏡を携帯しておかないと生活に支障がでるようになってきた。
そこでいっその事レーシックなども検討したものの、そういえば遠近両用コンタクトがあったことを思いつく。
ということで遠近両用のコンタクトを買うために一応医師の診察を受けることにした。

 

お医者さんは遠近両用コンタクトより眼鏡のほうがいいですよ、あまり期待したほどではないと言われたものの、実際つけてみると、コンタクト+老眼鏡よりよく見えるではないか!
これは、コンタクト、及び老眼鏡自体があまりあっていなかったせいもあるかもしれないが、いずれにしろ遠近両用コンタクトにして正解のようである。

 

とは言え、遠近両用コンタクトは高い(笑)