EXCELのVBAでIEをコントロール(序章)

すでにおおむね出来上がっていたのですが
ポップアップウインドウ、ダイヤログウインドウの処理がうまくいかなくてストップしていたが
今回ようやく解決の糸口が見えたので記事にしておく

〇EXCELのVBAでIEをコントロールのそもそも
σ(゚∀゚ )ワタシ、昭和の時代に汎用機のSEをやってまして
その時代にはPCなんぞ一般的ではなく
あったとしてもMS-DOSなものでした

そんな我が家に初めてやってきたパソコンは
Macintosh IIciというオールドマック
そして表計算はExcelが定番

その時代のMacの世界は
多くのフリーソフトが出回っていて
パソコン通信を通じて無料で入手可能な時代

それでも、お金を払ってでも買いたくなるほどの機能が、その時代のExcelにはありました

うろ覚えではありますが
現在のExcelにもマクロの記録というのがありますが
当時のExcelにもこの機能がありました

記録モードで操作をするとマクロシートに命令内容が書き込まれます
現在のマクロの記録はVBAが記録されますが
当時のものはマクロシートという、まるでワークシートのような各セルに
命令内容が書かれていくもの

ひと通りの操作を終了させたのちに
条件分岐などの体裁を整えれば
非情に汎用性の高い「プログラム」がいとも簡単に作成できる優れものでした


〇職場の業務システムの手の届かないところ
σ(゚∀゚ )ワタシの勤務先の業務システムはWebベースで作成されています
たとえば、日報の作成には、日付などの条件を入力して抽出ボタンを押し
内容を確認して印刷ボタンを押して出力された書類を上司に報告します

ある部門では、外部から提供されたCSVファイルをExcelで事前処理して印刷したものを
内容を確認したら、印刷した紙から、ひたすらWebベースの業務システムに手打ちして入力するような業務もあり
すでにデジタルデータがあるのに、アナログな処理を求められる非効率さが課題となっていました

システムのベンダーに改善要求を出しても、高額な開発料を要求され
長らく非効率さに涙を呑んでいたそうです
そこに私が着任し、「なんだそんなことか」と3日で作ったExcelは
汎用性はないものの、手入力専用のオペレーター(臨時さん)一人分の仕事がプログラムに置き換わりました
(臨時さん、職を奪ってごめんな)

これをどこからか聞きつけたわが社の各部門から
俺んとこもタノムってきやがった(笑)

一応言っとくけど、σ(゚∀゚ )オレ1500人規模の事業所の部長クラスなんすけど
わけあって、左遷されて、完全な暇人だったので
もう少し汎用性のあるものを作ろうと

そんなところから出てきたのが、冒頭にあったマクロシートである


〇マクロシートの構想
Basicをやったことのある人間なら行番号の便利さはわかると思う
現在のオブジェクト指向プログラミング、構造化プログラミングではおよそお目にかからないものだが
コンパイラ(インタープリタ)の負担が少ない

そんなわけで自作マクロシートの構造は
行番号
命令語
オプション1から6ぐらいとした

例えばこんな感じ
タイトル 行番号 命令語 Option1 Option2 Option3....コメント
例 番号 IEClick 検索指定 検索キー 添え字 IEの指定ID項目をクリック
実例 10 IEClick ID MyButton 略 10行目の命令はWebページのMyButtonというIDを持つ項目をクリック

こうしてセルに記入された命令郡を、VBAで解析しながらWebを操る

もちろんExcelからIEの項目に値をセットするのも自動だ
IESet 検索指定 検索キー 添え字 セットプロパティ 元シート名 元セルアドレス IEの指定ID項目に値をセット
先の例でいえば、エクセルの特定のシートの特定のセルから、Webの特定IDを持つテキスト項目に値をセット
という感じだ

参考画像
IECntlCMD.jpg
開発途中のものだが、命令の一覧


〇ポップアップがだめなんですよ
元々の業務システムは「人間を相手にする」ことが前提なので
例えばページの変遷において、確認メッセージを表示することがある
そんな場合はたいていがJavaのalert(表示する内容)なわけで

こいつに応答するには
ネットの検索すると、WindowハンドルAPIを使って

hwnd = FindWindow("#32770", "Web ページからのメッセージ")
てな具合で
PostMessage hwnd, WM_COMMAND, vbOK, 0
で対処するとある

確かにalertのメッセージならこれで動くのだが
職場の業務システムではこれができなかった

そして先日見つけたのがこれ
アラートのポップアップだと思ってハンドルを探してたが、こんなのがあったのか

引用開始
今さらながらJavaScriptのwindow.showModalDialogについて調べてみた。
http://d.hatena.ne.jp/replication/20100117/1263694945
引用終わり

簡単に言うと
IE独自のModalDialog関連キーワード ウインドウ名とクラス
1.親画面サンプル - Internet Explorer IEFrame
2.親画面サンプル - Internet Explorer Alternate Modal Top Most
3.子画面サンプル -- Web ページ ダイアログ Internet Explorer_TridentDlgFrame
1が親、2は親をマスクする透明ウインドウ、3がメッセージウインドウ本体
な関係で

最前面に表示される3は独立したウインドウ
2は1の前に常にお邪魔するブロッカー
ユーザーは1を操作しているつもりでも、つねに同じ位置にいる透明な2によってブロックされ
3が消えない限りブロックし続けるもの

この件についてさらに探っていくと、実はこの機能はIEしか実装されていない
狐火などほかのブラウザーではセキュリティー上の問題があるため実装しないとされているらしい

たしかにそうだ
Alternate Modal Top Mostの画面が万一ハックされればキーボードロガーどころではない
Webページへのすべての操作がハックされることになる

IEってすっごくこわい
自宅では絶対使いたくない!

という話は(つ´∀`)つオイトイテ
職場ではローカルイントラなので、この状況は続くだろう
であれば、Alternate Modal Top Mostには対応しなければならないね

基本的には、3のウインドウは単なるWebページがラップされただけのものなので
ウインドウハンドルからDocumentを取得さえできれば
通常のWebページをDomで操作するのとかわりない

ということで、先ほど実験したら、みごとに解決できた!
今後動作確認を経て、最新版のVBAソースもアップしてみたい


〇おまけ
VBAでIEを自動運転するという視点で開発したものだが
実はExcelの自動操作だけにおいても有効であることがわかった
現在の記録マクロはVBAに記録される

なので、VBAの知識がなければ汎用性のあるものにはコンバートできない
これが、(限りはあるが)昔のマクロシート並なユーザーインターフェースを持てば
結構な汎用性のあるものが簡単に構築できることになる

こいつは、案外使えるかもしれない
( ̄ー ̄)/~~ジャ
関連記事
スポンサーサイト

グリップを交換してみました(Address)

  • 2017-07-30 19:13:52 (Sun)
  • カテゴリ:バイク
AddressV125G改のグリップがだいぶすり減ってきてしまっていたので交換しました

基本情報として書いておきます
Addressの右ハンドルグリップ、つまりスロットルコーンには
イボイボがついていて、とってもきもちいいんです

じゃなくて
さすが変態バイクメーカーのSUZUKIです
そこにずれ止めは必要ないだろうといった細工がされています

そのわりに左グリップは全く普通に
グリップボンドで固定されています

ネットを検索すると
社外グリップに交換するにあたり、このスロットルコーンの凸凹を削ったというのがたくさん出てきます
手でやすりをかけたなんて言うのもあって、すごい疲れるそうです(笑)

σ(゚∀゚ )ワタシのAddressは中古で購入したものですが
俵型のグリップがついていて、しかも硬くて
見た目がどんくさいのと、感触が嫌で
すぐに社外品に交換しました

交換にあたって情報を集めた結果
上記の凸凹の話があったので
懸案であったスロットルコーンも交換しています

Addressはどうせ非力な原チャですので
アクセルなんてオンとオフだけあれば十分!
ということで、ちょいハイスロになる社外品のスロットルコーンです

これにより
純正品の凸凹対策と同時に
社外品グリップへの換装を容易にできる一石二鳥でございます

写真1
IMG_8640_R.jpg
購入したグリップ
デイトナのプログリップシリーズ(イタリア製)
注意事項

このシリーズは実にたくさんのバリエーションがありますが
必ず原チャ専用のものを選んでください
店によっては通常のグリップのコーナーとは別に原チャコーナーがあってそっちに置いてあります

柏のライコでは通常のグリップのコーナーにはなくて焦りました

念のためサイズ等を記録
1.エンド非貫通
2.長さ115mm
3.内径 左22mm 右25mm

プログリップシリーズは、いわゆるゲルグリップという仕様で
非情に柔らかな素材のゴムでできています

手によく馴染み、吸い付く感じがします


写真2
IMG_8643_R.jpg
外したグリップとの比較
長さが微妙に違うのはないしょです(笑)

すり減ってグリップエンド付近に穴があいています
交換前のグリップも実はオフロード専門店で購入したプログリップの品
毎日使って約2年でこんな状態ですが、お値段がお安いので元が取れます


写真3
IMG_8644_R.jpg
右グリップの様子
特に道具を使わずともこんな感じに外れます
ちょいハイスロコーンの様子もわかりますよね

ちなみに、前回のグリップ交換時にはグリップボンドを使いませんでした
使わなかったことによる不具合としては
右にはまったく問題なし、左は「気が付くと多少寄れている」ねじれているぐらいです


写真4
IMG_8647_R.jpg
新グリップ装着後
ちゃんと選んで長さもぴったり!

ところで
交換前のグリップを外すところまでは簡単だったのですが
新しいグリップをつけるのは一苦労

人によってはCRCなどの潤滑剤を吹き付けるというのもありましたが
ゲルグリップの特徴として、溶剤には弱いので使えません

そこで、前回の交換時と同じ作戦として
圧縮空気を使うことにしました

エアコンプレッサーに先端のとがったノズルをつけ
グリップの耳の部分を手で引っ張りながらノズルを突っ込むと
グリップ自身が膨張して簡単にハンドルから外せます

ちなみに
貫通式や非貫通であっても穴が開いている場合
誰かの手で、その穴をふさぐ必要があります

では、自分ではコンプレッサーなんぞ持っていませんのでGSに自走です

グリップがついていない状態で一番近いGSまで慎重に走ります
がぁーん!
最近はセルフのGSばかりになったせいか、コンプレッサーはあるものの
まともな工具が一切なく、先端がノズルになったエアツールがないGSでした

仕方がないので「商売道具を借りる」にはいささか抵抗がありましたが
いつもお世話になっているバイク屋さんに向かいました

事情を説明しエアツールを貸してほしいといったら
即答で了解しただけでなく、グリップを押し込むのを手伝ってくれました(笑)
ありがとうございます

今回はちゃんとサイズを選びましたので
まさにぴったりフィット!
「あぁ~~ん、いちばん奥まで届いているぅ」な感じです

( ̄ー ̄)/~~ジャ
関連記事
おもちゃ箱
Count from 2010/01/14

にほんブログ村 バイクブログ ドゥカティへ


カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
最新記事
最新コメント
カテゴリ
月別アーカイブ
リンク
検索フォーム
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

全記事表示リンク

全ての記事を表示する