ブラックボックスでよくわからない
楽天RSS2で歩み値の履歴が300件まで取れるため、これを銘柄ごとに取得してデータベース(access)に転送するVBAを組んだのだが、うまく歩み値の履歴が取得ができない銘柄がある。
手動では100%取得できるため、ループと相性が悪いのか、組み方が悪いのか、途中で止まることもあれば、特に最後の1つが取得できない確率が5割と、安定感にかける。
試行錯誤した末の暫定対策(現在未使用)
リストは銘柄ごとに初期化(歩み値の出るところを全部消す)し、次の銘柄を入力する。次の銘柄のリストが2秒間表示されない場合、=RssTickList()のところを消して別のセルに入力する。それでもだめなら再度消してさらに別のセルへ入力を…のループを繰り返す。
処理がうまくいったらそのセルの入力を消して元のところに戻しておく。とりあえず成功率100%になった。このデータを活用できるかはまた別の話。
2021/11/01 恒久対策
この関数に限ったことではないが、とにかく楽天RSS2が安定しないとは思っていた。というよりすぐに値を更新しなくなる。どうもこの楽天RSS2が通信しようとしたとき(?)にVBA側が処理を占有していると、一撃で更新を止めてしまう。上では、無理やり再度処理を始めさせるために関数を消して表示という力技に頼ったが、Application.Ontimeを使用するしかない模様。
力作を作っていると修正が不可能なレベルの可能性もある。修正が可能であればこちらが圧倒的に安定する(少なくとも私の環境:Windows10 64bit Excel2019 32bitでは)
コメント
解決済みかもしらんけど、Excel側の画面更新が問題かもしれませんよ。
信用取引情報がうまく取れなかったのだけど、
画面強制更新を2,3回ループしたらうまく動くようになった…。
https://teratail.com/questions/200686
コメント&貴重な情報ありがとうございます。
一応画面更新は行われるようにしているのですが、リンク参考にさせていただいて
修正してみたのですが、動作は変わらなかったです。
最終回だけ失敗するので、私のコードが悪い気はするんですが、
よくわからないですね。暫定対策が恒久対策になりつつあります。
結局はVBA側が常に処理を持っていたのが悪かったようで、Application.Ontimeで
メイン処理をループするような作りにするとうまくいきました。