LoginSignup
0
1

More than 1 year has passed since last update.

Excel(VBA)でIEを自動化する方法と罠

Posted at

仕事のによっては、偶にセキュリティ制限がかなり厳しい所があるんでしょう。

普段Python+Seleniumで簡単にブラウザーを自動化操作する方法は、セキュリティの制限により、Pythonがインストールできないか、Seleniumライブラリのインストールできないか、または、Chrome/Edge/Firefoxなどのブラウザーがないから、使えなくなります。

この時はExcelのVBAを使ってIEを自動化しましょう!どういう環境でもほとんどExcelがあるし、IEがWindowsでデフォルトのブラウザーなので、勿論あります。

昔々、VBAを触ったことがあり、地味なIDEなのでなんか前世代の言語で使いにくいかと思いました。今回真面目に使ったら意外的に使えるじゃんと思っていましたね。
Excelファイル中のデータの読み取りはすごく簡単のほか、文法も簡単だし、コード補完もあるし、改行なども自動認識できるし、なんかPythonと意外的に似ているイメージでした。とはいえ、前世代の言語は実事なので、罠もありました。

0、型を使用する前にインポートが必要

「0」番にした理由は、罠ではないですが、知らないとあれれくらいです。
「Visual Basic > ツール > 参照設定...」からMicrosoft Internet ContolsMicrosoft HTML Libraryをインポートすれば、下記の変数を定義する時は具体的な型で定義できます。

Public IE As InternetExplorer
Public DOC As HTMLDocument

1、IEのセキュリティ設定

IEは Protect Mode またはセキュリティレベルが低い以外の場合、下記みたいなエラーが表示されます。

Run-time error 'xxxxxxx': Automation Error The object involved has disconnected from it clients.

解決案は幾つありますが、私は下記の案を採用しました。IEインスタンスを作成する時、New InternetExplorerの代わりにNew InternetExplorerMediumを使います。

Set IE = New InternetExplorerMedium

2、必須フィールドのValue設定は認識できない

画面上の入力欄などの必須フィールドの.Value属性を設定しても未設定と見做すことがあります。HTMLソースを見ても設定ができている状態なのに。。。
解決案は、.Value属性の設定の代わりにSendKeysを利用します。

Public Sub SetValue(ele, value)
    ele.Focus
    Application.Wait (Now + TimeValue("00:00:01"))
    SendKeys value
    Application.Wait (Now + TimeValue("00:00:01"))
End Sub

3、日本語入力問題

上記の 2SendKeysで値を設定する方法は、日本語の設定はできないです。
解決案は簡単で、.Value属性を設定したあと、上記のSetValue関数で一つスペースを入れます。

4、Waitが重要

上記のソースコードを見てもWaitが多いですね、本来は下記のコードでロード未完了の画面を待てますが、実際に使用する時何かの原因でロード未完了のままに次のコードが実行されてしまいますね。

IE.navigate "https://www.google.jp"
Do While IE.readyState < READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop

また、画面上のポップアップやプルダウンなどのアニメーションがある場合、すぐには後ろの操作を実行すると対象が見つからない可能性があります。
そのため、Waitがすごく重要です、疑えるところはWaitを入れましょう!

Application.Wait (Now + TimeValue("00:00:01"))

感想

環境上は何もない、途方に暮れる時、ExcelとIEはきっとあるでしょう、この二つものがあればなにかなるでしょう!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1