エクセルVBAによるIEを操作するクラスに指定秒数の待ち時間を入れるメソッドを追加する


wait

photo credit: eeems via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルVBAでIEスクレイピングをするときに便利なクラスの作り方をお伝えしております。

前回の記事はこちら。

エクセルVBAでIEを操作するクラスにログイン処理をするメソッドを追加する方法
エクセルVBAでIEスクレイピングをするときに便利なクラスの作り方をお伝えしております。今回は、エクセルVBAでIEを操作するクラスに、ログイン処理をするメソッドを追加する方法をお伝えします。

ログインが必要なサイトをスクレイピングする際の、ログイン処理をメソッド化する方法をお伝えしました。

さて、しばらくお世話になってきた、読み込み待ち用のWaitメソッドですが、意図的に待ち時間を増やしたいときありますよね。

今回は、その点をパワーアップしていきますよ。

エクセルVBAによるIEを操作するクラスに指定秒数の待ち時間を入れるメソッドを追加する方法です。

では、行ってみましょう!

前回のおさらい

では、前回のおさらいからです。

IEを操作するクラスIEObjectのコードはこちらです。

前回はLogInメソッドを作りました。

そのおかげで、ログインしているかどうかといった判定もするにも関わらず標準モジュールがとてもスッキリします。

そんな、検証用の標準モジュールのプロシージャはこちらでした。

Waitメソッドに指定の秒数の待ち時間を入れたい

さて、先ほど紹介したコードにIEObjectクラスのWaitメソッドというものがあります。

これは、IEが読み込み待ち完了まで待つためのメソッドです。

URLを踏んでサーバーから新たなWebページを読み込むときなどは、このメソッドによる読み込み待ちで十分なのです。

ただ、ブラウザ上でJavaScriptが動作するようなときには、それが最後まで実行されない間に、マクロが次の処理を実行しに行ってしまうようなケースがあります。

そのようなときに、意図的に何秒かの待ちをプラスして入れたいというときがあるんです。

指定秒数だけマクロの動作を停止する

指定の日時までマクロの実行を停止する

この目的を達成するときに活躍するのが、ApplicationメソッドのWaitメソッドです。

これは、指定の日時までマクロの実行を停止するというものです。

Application.Wait 日時

今から指定の秒数後を求める

Waitメソッドで指定する日時を「今から指定の秒数後」にしたいわけですね。

例えば、こうします。

現在日時を取得するNow関数に加えて、時、分、秒から時刻を生成するTimeSerial関数を使います。

Now
TimeSerial(時, 分, 秒)

TimeSerial関数の「秒」を秒数secを加算した時間まで停止するとするのです。

待ち時間を加えたWaitメソッド

では、IEObjectクラスのWaitメソッドを修正していきましょう。

これで、WaitメソッドではIEの読み込み待ちをした上で、引数で受け取った秒数sec分だけ意図的に停止します。

では、以下の検証用のプロシージャを実行して確認してみましょう。

しかし、実行すると以下のようにコンパイルエラーになってしまいます。

コンパイルエラー:引数は省略できません

IEObjectクラスのNavigateメソッドでも、Waitメソッドを使っていたんでした…。

そして、そこで引数を与えていなかったのでエラーになっちゃいました。

引数を省略可能にする

ここで、引数を0などとしても良いのですが、せっかくなのでもう少し使い勝手をよくしましょう。

Waitメソッドの引数を省略可能にするのです。

Subプロシージャを宣言する、Subステートメントで以下のように指定をすることで、引数の省略と省略時のデフォルト値の指定が可能です。

Sub プロシージャ名(Optional パラメータ As 型 = デフォルト値)
 ’処理
End Sub

ということで、Waitメソッドを以下のように変更します。

これで先ほどの検証用プロシージャを実行します。

本ブログのトップページが読み込まれた後、しばらくする(5秒後)とIEが閉じるのが確認できるはずです。

まとめ

以上、エクセルVBAによるIEを操作するクラスに指定秒数の待ち時間を入れるメソッドを追加する方法をお伝えしました。

読み込み待ちをするWaitメソッドは、本記事のように省略可能な待ち秒数を受け取れるようにしておくと、汎用的に便利に使えますね。

また、IEクラスのグッドな追加機能があれば紹介していきますね。

どうぞお楽しみに!

連載目次:エクセルVBAでIEを操作するクラスを作る

エクセルVBAでInternetExplorerを操作してWebスクレイピング、まだまだ現役で必要となる現場もあるでしょう。このシリーズでは、IEを使ったスクレイピングをするときに便利なクラスの作り方をお伝えします。
  1. エクセルVBAでIEを操作するもっとも簡単なクラスを作成する方法
  2. エクセルVBAでIEを操作するクラスでWebページを開くメソッドを追加する
  3. エクセルVBAでIEを操作するクラスに読み込み待ちとドキュメント取得の機能を追加する方法
  4. エクセルVBAでIEを操作するクラスにname属性で取得した要素から内容を取り出すプロパティを作成
  5. エクセルVBAでIEを操作するクラスにリンクテキストでa要素を探してリンクする方法
  6. エクセルVBAでIEを操作するクラスにテーブルのデータを取得するメソッドを追加する方法
  7. エクセルVBAでIEを操作するクラスにWebページのテーブルデータをシートに書き出すメソッドを追加する
  8. エクセルVBAでIEを操作するクラスに検索入力&ボタンクリックのメソッドを追加する方法
  9. エクセルVBAでIEを操作するクラスにログイン処理をするメソッドを追加する方法
  10. エクセルVBAによるIEを操作するクラスに指定秒数の待ち時間を入れるメソッドを追加する

  投稿者プロフィール

タカハシノリアキ株式会社プランノーツ 代表取締役
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ
★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ
★フォロー頂ければ嬉しいです。

タイトルとURLをコピーしました