Excell VBAでIE操作してみたTIPS
■経緯
Excel VBAでIEを思いのままに操作できるプログラミング術 〜窓の杜 特別レッスン〜
http://www.forest.impress.co.jp/docs/special/20130516_599332.html
を見て、便利そうなのでちょっとやってみました。
■まずは入門
VBも知らない若輩者ではなかなか難しいです。
http://excelvba.pc-users.net/index.html
言語体系と、セルへのアクセスをなんとなく学習。
こちらのやりたいことマッチしてるので、基本的にこのサイトをパクる。
■データ型
データ型が意味わからず困る。
http://excelvba.pc-users.net/fol5/5_2.html
よく使うのは汎用のVariant型、数値のInteger型と、DOM?で使うObject型。
汎用というのもどこまでいけるのかもよくわからない。
関数の引数はちゃんと型判別されるので使い分けが必要。
- NullとEmptyとNothingと空の文字列の違い
http://www.moug.net/tech/acvba/0050010.html
IEのWebブラウザコントロールオブジェクトはObeject型らしい。
で、ObjectのNULL的なものが"Nothing"値。
"Nothing"かチェックして分岐するには、
If Obj Is Nothing Then
...
End If
という特殊な書き方が必要らしい。
If Obj = Nothing Then
ではダメ。なんでだ。
http://pc.nikkeibp.co.jp/pc21/special/2007_gosa/eg4.shtml
Object型に代入しようとすると動作がおかしい。
どうもObject型だけはSet命令を先頭につけないといけない。意味不明。
■フォームへの入力
基本的には
objIE.document.getElementById("AucSearchTxt").Value = "hoe"
などでイケるのだけれど、IDが設定されていない他サイトのフォームには使用できない。
Classや名前で代用しなきゃいけない。
- フォームの取得の仕方あれこれ + フォームあれこれ
objIE.Document.getElementById("id").Value = Cells(2, 1).Value = "hoge" 'textboxt
objIE.Document.getElementsByName("name")*1.Click 'radio button
objIE.Document.getElementsByClassName("class name")(0).SelectedIndex = Cells(2, 1) 'pull-down選択
objIE.Document.getElementsByClassName("class name")(0).Value = Cells(2, 1) 'pull-down代入
objIE.Document.getElementsByTagName("tag name")(0).Value
element型で返ってくるものと、element型のArrayで返ってくるものがあるようだ。対象が一意に決まっているなら(0)を付けて1つ目の要素にアクセスする。
■XOR
0と1を反転させる方法に困ったので、1足して2の剰余を取ってみた。XORはあるんだろうか。
■ドキュメント
未だに利用しているIEとの連携機能の名称が判っていないけど、ドキュメントはこれっぽい。
getElementsByTagName method (Internet Explorer)
■そして
目的は達成できた!!
・・・が、複雑な操作が可能なページでは、なかなか細部までいじるのが難しいのが正直な感想。
Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応
- 作者: 近田伸矢,植木悠二,上田寛
- 出版社/メーカー: インプレス
- 発売日: 2013/04/19
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (7件) を見る
*1:Cells(2, 1