週末はだいたいプログラミングしてました。
シストレ全自動化をするには朝にマケスピとエクセルを起動させなければならないのですが、これで2日かかりました。
それぞれの作業はそんなにむずかしくないのですが、組み合わせると急に挙動がおかしくなります。
同じような目に遭っている人もいると思うので備忘録的に残しておきます。
1.windowsタスクスケジューラを使ってエクセルやマケスピを起動させるとキーボードマクロ系がかなり怪しくなる。
VBAでキー入力するsendkeyですが、これが効かない状況が多発します。というのもウインドウがなぜかアクティブにならないのです。アクティブにしようとしても全然いうことを聞かないので、マウスをコントロールして強引にアクティブにするのですが、これも効かないパターンが多発しました。
で、タスクスケジューラでマケスピを起動させるのをpythonにやらせればわりとすんなりといきました。pyautoguiというpythonのキーボード操作はいうことを聞いてくれることが多かったです。
3.pythonでxlwingsを使ってエクセルを開くと、楽天RSSアドインが表示されない。
タスクスケジューラでエクセルを直接開いたあとでマケスピを起動させるとなにかと挙動が怪しくなるのでエクセルを開くのもpythonにやらせればいいじゃないと思ったのですが、なぜか楽天RSSを読み込んでくれません。
アドインパスを送れば一応楽天RSSを読んでくれるので、それから楽天RSSに接続できるかと思ったのですが、エクセルだけを開いた場合はRSSを読み込んでくれるのに、マケスピを起動させると読んでくれませんでした。
また、マケスピを起動させるプログラムとエクセルを起動させるプログラムを分けたりもしましたが、やはりマケスピが起動している状態ではアドインを読み込んでくれません。
それならば先にエクセルを読み込んで、そのあとでマケスピを起動させればいいじゃないと思ったので、それをしたのですが、今度はキー操作の挙動が不審になりました。
4.タスクスケジューラでエクセルを起動後VBAでマケスピを起動させると挙動不審になる。
これが一番シンプルかと思いましたが、やはりマケスピが絡むと挙動がおかしくなりやすい気がします。なので、基本はマケスピを開くタスクとエクセルを開くタスクは別にやった方がよく、なおかつマケスピは最初に開いておきたいという結論に至りました。(エクセルを先に開いてしまうと、必ず間にマケスピを開くタスクが生まれててサンドイッチになるため)
最終的にたどり着いた方法
前もってやっておくこと
・楽天RSSの自動接続ON
・エクセルのクイックアクセスツールバーに楽天RSSの接続系のアドインを追加しておく(ちなみにクイックアクセスツールバーはxlwingでは読み込んでくれませんでした。わたしの場合、「名前を付けて保存」も足していますが、altを押したときの楽天RSS接続の番号が4番だとsendkey操作では接続してくれないというエラーが出たので5番になるようにしています)
手順
1.タスクスケジューラでマケスピをpythonから起動→おまじないとして最後にwin+Mで最小化しておく
2.タスクスケジューラでエクセルを起動(毎回任意の位置に開くようにworkbook_openとapplication.top,leftで位置指定。わたしの場合はモニター1枚使って最大化しています。閉じる時に最大化したままだと次に開いた時に位置指定でエラーがでるのでbeforecloseイベントでサイズが標準になるようにした方がいいと思います)
3.VBAでオープンイベントを使い、マウス操作でウインドウを1回クリックしてアクティブにする。その後sendkeyでalt6を送り発注をtrueにする
だいたいこんな流れです。
最初は楽天RSSの自動接続はOFFにしていたのですが、接続をtrueにするという作業で引っかかることが多かったので自動接続ONにしました。接続さえしていれば発注をtrueにするのは失敗しにくいようです。
最後に
めちゃくちゃ時間がかかりましたが、タスクスケジューラを使わずにダブルクリックでエクセルを開き、VBAを走らせた場合はすんなりと動いてくれたので、別アプリでマウスマクロを使って強引にダブルクリックでオープンするほうが安定する気がしないでもないですが・・・。ひとまずはこれで様子をみたいと思います。
人の手なら30秒でできることにどれだけ時間かけとるねんと思った方はクリックをお願いします。
本日の取引
ノートレなので土曜から月曜までにマケスピにログインした回数をかわりに載せておきます。
裁量ログイン 約200回
コメント