かぶのすけ
VBS経由でマクロ実行時のデータ取得ができない件
いつも困ったらこちらを拝見して勉強させていただいています。今回初めて質問させていただきます。
エクセル2016.windows11にて岡三RSSCFDを利用して、240分足の始値、高値、安値、終値、取引数量、建玉数量を取得、別シートへ転記するマクロを書きました。
既存の足データを一度全てClear contensし、
その後DoEventsとDo loopにてRSS側から再度データを取得させる仕組みにしました。
A
全て手動で
1.ネットトレーダー株365を起動→2.エクセルを起動+同マクロを含むファイルを開く→3.マクロ実行
とすると問題なく転記することができました。
こちらを自動化するためにVBSを書いて
B.
1,手動でネットトレーダー株365を起動→
2.VBSにてエクセルを起動+同マクロを含むファイルを開く3.同VBSにてマクロ実行
とするとうまく転記できません。
動きを見てると既存のデータを消した後に再度データが埋まらずにそのままマクロが走ってしまい、最新データを取得できない様です。
AとBの違いはVBSで実行するかしないかだけなのに、なぜこの様になるのか分からず1ヶ月近く試行錯誤していましたが、自力ではお手上げです。具体的にはVBA上で、wait.sleep.CalculateなどとDoEventsの組み合わせを追記してみたり、
VBS上でSleep 3000を散りばめたりしてみましたが、なんとも解決しません。
どうしたらVBSからでもうまくデータを取得させられるのでしょうか?
2024年03月02日
大野 了
かぶのすけさん、こんにちは!!
まず、コメントを見つけるのが遅くなってしまい、返信が遅くなってしまいました。
大変申し訳ございません。
一点確認です、こちらはExcelの『VBA』ではなく、WSHを使用し『VBS』で起動されているという事で間違いありませんでしょうか?
多分、起動のさせ方だとは思うのですが・・・
現状の情報だけですと判断が厳しそうです・・・
もし、問題がなければ、起動を行っているVBSと転記しているExcelを上げていただくことは可能でしょうか?
ファイルを見てみたいと思います!!
また、もしファイルのアップが厳しい場合は、
起動しているところのロジックと、起動させたいマクロの部分の情報をいただけますと幸いです!!
2024年03月11日
かぶのすけ
大野様
返信ありがとうございます。大変嬉しいです!
一点目の確認ですが、WSHの言葉が分からず調べるほどの、レベルでして(今までネット独学のみのため)、明確な回答ができないので、ファイルを準備してアップしようかと思います。今しばらくお待ちください。今週いっぱいをめどに準備出来次第アップします。
2024年03月12日
かぶのすけ
スクリーンショット 2024-03-15 071324.png (104.3KB)
大野様
ファイルの内容がNGなのか、添付しようとしてもはじかれてしまうので、コードをこちらに記載します。
まず,VBSのコードはこちらです。
Option Explicit
Dim objExcel
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
dim filePath
filePath = "F:\SynologyDrive\myfile\個人\自動起動.xlsm"
objExcel.Workbooks.Open(filePath)
objExcel.worksheets("時間").select'シートが一つの場合はコード自体不要になる。
objExcel.Application.Run"時間記入"
'Msgbox "マクロを実行しました"'クリックしないとExcelを閉じないのでコメントアウト
objExcel.DisplayAlerts = False
objExcel.Quit
Set objExcel = Nothing
以上です。
次にExcelのマクロのコードですが、こちらです。
Sub 時間記入()
Sheets("チャート").Select
Range("A6:F6").Select '1行目のチャート範囲選択)
Range(Selection, Selection.End(xlDown)).Select '(最終行まで範囲選択)
Selection.ClearContents '消す
DoEvents
Sheets("チャート").Select
Range("E3").Select
ActiveCell.Formula2R1C1 = "=CFDREFRESH()" '更新
DoEvents
Sheets("時間").Select 'いったんほかのシートをアクティブにする
Sheets("チャート").Select '元のシートに戻ってくる。
DoEvents
Sleep 5000 'スリープで試す
DoEvents
For i = 1 To 30000 '無意味な処理で試す。
DoEvents
Next i
For i = 0 To 5 '// 1秒停止を5回試す。
Call Application.Wait(Now + TimeValue("00:00:01"))
Debug.Print Now
DoEvents
Next i
i = 5 '日時の行にする
Dim stamp As Long
'フル計算にしてみる。
Application.CalculateFull '再計算する
'waitで試す。時間がかかる
Do Until stamp >= 50 '5秒経過するまで待つ
Application.Wait [Now()+"00:00:00.1"] '100mm秒待機
DoEvents
stamp = stamp + 1
Loop
Sheets("時間").Select
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
Cells(LastRow + 1, 1).Value = Now 'A列の最終行に今の時間を記入する
Sheets("チャート").Select
ChLastRow = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(ChLastRow, 1), Cells(ChLastRow, 6)).Select 'チャートの最終行を選ぶ
Selection.Copy
Sheets("時間").Select
Cells(LastRow + 1, 2).Select
ActiveSheet.Paste
ThisWorkbook.Save 'セーブする
End Sub
以上です。
画像を添付できましたので補足しますと、こちらの"チャート"シートの各数値を一度消して、再度表示させようとしているのですが、VBS経由だと数値が再度表示されないという状態です。
2024年03月15日
かぶのすけ
転記したいシート.png (175.7KB)
追加補足です。
転記したいシートの画像も張っておきます。
うまくいけば数値が貼り付けられます。
2024年03月15日
大野 了
かぶのすけさん、こんにちは!!
これまた、気が付くのが遅くなってしまい大変申し訳ありません。
コードありがとうございました!!
=========================================
まず,VBSのコードはこちらです。
Option Explicit
Dim objExcel
中略
objExcel.Quit
Set objExcel = Nothing
=========================================
こちらのコードはExcelのマクロではなく・・・
xxxx.vbsというファイルを作り、それをダブルクリック等で動かされているという事で間違いありませんでしょうかー?
2024年03月19日
かぶのすけ
大野様
ご覧いただきありがとうございます。
ご質問の件はおっしゃる通り、****.vbsというファイルを作り、ダブルクリックで実行しています。もし動作がうまくいけば、タスクスケジューラで実行する算段です。
2024年03月19日
大野 了
かぶのすけさん、こんにちは!!
ご返答ありがとうございます!!
xxx.vbsというファイルを作り、頂いたコードを含んだサンプルを作って動かしてみたのですが、
マクロ自体は正常に動作いたしましたー
多分、ファイルの別のところに原因があるかもしれませんので、
もし問題が無ければファイルをあげて頂けますと幸いです。
※ファイルは、拡張子を『xlsm』から『xlsx』に変えてあげると、投稿できるようになります!!
また、タスクスケジューラで実行されるとのことですが、これは数分おきにマクロを自動実行されたいということでしょうか?
それでしたら、VBAにある『onTime』メソッドを使用すると、マクロを定期実行することができます!!
Excelを立ち上げっぱなしになってしまいますがー
以前いただいた質問のリンクで大変申し訳ございませんが、こちらをご参考いただけますと幸いです。
https://bbs.okasan-online.co.jp/ont/rss/board/?page=1&topic_id=258#comment_1385
これを使えばタスクマネージャなどを使用して外部から起動させなくても、最悪、定期的にマクロを動かしてデータを転記することはできると思います!!
2024年03月19日
大野 了
リンク先のサンプルの中にある"Macro1"を"時間記入"に書き換えていただき、
『時間記入』マクロの一番最後に入れていただけますと動作すると思います。
また、サンプルは2秒間隔ですので、
NextTime = Now + TimeValue("00:00:02")
の部分の、"00:00:02"の部分を定期的に実行したい時間にご調整いただくと
さぶのすけさんのご希望の間隔で動作させることができると思います!!
2024年03月19日
かぶのすけ
自動起動.xlsx (96.1KB)
大野様
ありがとうございます。
ExcelのOnTimeの件はまた今週末に確認させていただきます。
取り急ぎ、ファイル自体に問題ないかの件、xlsmファイルをエクスプローラー上でxlsxに変えたものをUPします。
2024年03月20日
かぶのすけ
次に、vbsファイルをエクスプローラー上でtxtファイルに変えたファイルをUPしようとしましたが、txtファイルでは駄目なようです。
先ほどのxlsxファイルのみでご判断いただくことは可能でしょうか?
2024年03月20日