ExcelでするならUIAutomationがよいらしい
やることの内容とすればそこまで難しくないのだが、相当苦戦した。楽天RSS2のVBA関数から直接操作する方法がないというのが一番の問題点。
二番目がExcelVBAで行う方法を検索し、UIAutomationという方法があるらしいということでやろうとする。これが相当情報が少なく、尋常なく苦戦を強いられた。参考サイトをはじめとしたサイトが軒並み電卓のような超シンプルなアプリでの説明であるのに対し、自動操作したいのはエクセルである。
そもそも電卓ですら相当操作がしんどい。最上位ウインドウから要素を検索しながら潜っていき、押したい場所を特定しボタンを押す。エクセルの場合かなり深く10階層くらいある。
やっとこさ5時間かけてバグ取りしたら、結局クリックできない。他のボタンはクリックできるが楽天RSSのボタンはなぜかクリックできない。ただでさえボタンの一つ上の要素が名無しで、エクセルで名前を付けるも保存の度に無名に戻ってしまう謎仕様に加え、クラスが同じ名前のため、ボタン名で検索をかけるもボタン名に改行が入っており、いったいどうやって検索かけるんや…という状態である。
別の手法を思いつく
接続状態と発注機能をクイックアクセスツールバーへ登録する。ファイルタブ→オプションからクイックアクセスツールバーを開きこの2つを追加する。こうすると下図の場合、Alt+1で上書き保存、 Alt+2でUndo、 Alt+3でRedo、 Alt+4で接続状態を変化、 Alt+5で発注機能を変化させることができる。
あとはVBAより
Sub Auto_connect() Call AppActivate("自動取引用.xlsm - Excel")'自動取引用のエクセルの名前を入れる SendKeys "%{4}", True End Sub Sub auto_order_enable() Call AppActivate("自動取引用.xlsm - Excel") SendKeys "%{5}", True End Sub
これで完成。…のはずだった
なぜか安定しない
安定して動作するならば、これでよかったのだが、なぜか安定しない。ほおっておいても通信を始めたり始めなかったり、意外と時間がかかることもあったりするが、朝自動起動して接続中かつ発注可で動いていなければ話にならない。
UIAutomation を用いて接続状態や発注機能を定期的に監視し、接続中でなければ接続し、接続中だが発注不可の場合は発注可とするようVBAを作成した。何とか完成した。
コメント
楽天証券で自動売買しようとネットで調べまくった結果、こちら様の記事に本当に助けられました。クイックアクセスツールバーなどの思いつきがないと無人でログインから売買まで辿りつけなかったと思います。
コメントなどいつもはしないのですがどうしてもお礼を言いたくて残させてもらいます。ありがとうございました。
コメントありがとうございます。
そう言っていただけると苦労して書いた甲斐があったというものです。
こちらこそありがとうございます。