素人がExcelVBAによる「一人働き方改革」に挑むブログスマートフォン用の表示で見る素人がExcelVBAによる「一人働き方改革」に挑むブログExcelVBAネタです。前々回の問題点の項でも触れたとおり、VBAからHTML上の要素に対してclickメソッドを実行してページ移動した場合、親元のInternetExplorerオブジェクトのDocumentプロパティがちゃんと移動後のHTMLDocumentオブジェクトを返してくれる場合と、移動前のHTMLDocumentオブジェクトを返す場合がある。素人の私にはなぜこんなわけのわからないことになるのかサッパリ不明だが、とにかく処理の結果が気まぐれというのは実に困る。仕事でIEを自動操縦するというのは、シェフがサラダを作るのとは違うのだ。原因がわからない以上、素人の私としては対症療法的に対応せざるを得ない。踊るダメ人間が生きて行かざるを得ないように。そこで、登場するのが、akashi-keirin.hatenablog.comこのときに作成したgetIEByTitleメソッド。InternetExplorerオブジェクトのDocumentプロパティが移動後のHTMLDocumentオブジェクトを返してくれないときでも、画面上にはちゃんと移動後のページが表示されているのである。ウインドウに表示されているIEを再び捕まえ直せばよいわけだ。そこで、前々回のリスト1に、次のようにコードを追加する。Sub追加したのは(1)からの13行(実質11行)。前回akashi-keirin.hatenablog.comご紹介したisTargetPageというメソッドを用いている。InternetExplorerオブジェクトのDocumentプロパティの返り値の返り値を調べ、今回の場合だとtitleプロパティの返り値に「ち~んw」が含まれていたら目当てのページが表示されているとみなす。Doループ内部では、カウンタ変数「n」の値が2を超えていたら、すなわちループ3周目に入ると、今のインスタンスtargetIEに見切りをつけて、getIEByTitleメソッドでタイトルに「ち~んw」が含まれるウインドウを捕まえてInternetExplorerオブジェクトをtargetIEにセットし直す。試行で正しいページが取得できているのか確かめる用。Subはページが移動できていない時用。そもそもページが移動できていなければ無限ループになってしまうので、試行5回で見切りをつけてやめてしまうようにする。実行イミディエイト・ウインドウの様子をどうぞ。2回失敗して3回目で無理矢理目的のページを取得したっぽい。おわりに決して美しい対応ではないけれど、致し方ないとは思う。実は、ここまでの過程で当初の目的であった職場に導入されたWebアプリの攻略は終わっているので、このシリーズも今回でおしまい。»プロフィールid:akashi_keirinExcelVBAネタです。SyntaxHighlighter.all();注目記事はてなブログをはじめよう!akashi_keirinさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。