質問掲示板
岡三RSS
集いの広場

アップロードされたファイルおよび投稿内容についての注意事項 別窓

複数の単語で検索する方法 別窓

【RSS 365FX、RSS 365CFD】質問箱

かぶのすけ

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日

ログインしてコメントを投稿する
12

すべての投稿を表示する

to_top
to_top

アップロードされたファイルにはウイルスチェックを行っておりますが、未知のウイルス等に感染されている場合がありますので、アップロードされたファイルのご利用はご注意ください。
また、取引パスワード等の重要な情報を投稿内容に含めないようご注意ください。
なお、アップロードされたファイルの利用や投稿内容によって、投稿者自身や他の利用者が被った損害に対して当社は一切責任を負いません。

また、セキュリティの関係上、一部コマンド等を含む内容を送信するとエラー画面が表示され、投稿ができない場合がございます。何卒ご了承ください。

岡三RSS集いの広場では、複数の単語による検索が可能です。

例)関数 and サンプル
→AND検索となり、「関数」および「サンプル」を含む検索結果が表示されます。

例)関数 or サンプル
→OR検索となり、「関数」または「サンプル」を含む検索結果が表示されます。

例)関数 not サンプル
→NOT検索となり、「関数」を含むが「サンプル」は含まない検索結果が表示されます。

※and、or、notの前後は半角スペースで区切ってください。
※単語の間を半角スペースで区切るだけだと、OR検索となります。