DOMを変数で渡してinnerTextを得る方法 削除
Message#3 2015年7月14日(火)21時13分 From: pyonko |
VBAマスターのメッセージ(#2)への返事 > よく分からない部分もあったのですが > > objIE.sh2.Cells(i, 2) > > の部分がエラーがでて動作しないということでしょうか? > > sh2.Cells(i, 2)に記述されたobjIE.Document.body.all.tags("ul")(3).innerTextを利用しているということですが、こちらを当てはめたら、objIE.objIE.Document.body.all.tags("ul")(3).innerTextでobjIEオブジェクトが2つ続きます。 まずは訂正させてください。objIE.objIEとならないように、 sh1.Cells(i, 2) = sh2.Cells(i, 3) としています。この結果はエラーにはなりませんが、(当然ですが)文字列で、 objIE.Document.body.all.tags("ul")(3).innerText と出力されます。 > > 試していませんが、セルをオブジェクトに代入してもエラーが起きるだけではないでしょうか? > > サイトによって値が異なるのであれば、処理をサイト毎にわけるか、統一したデータを取得する方法を利用するほうが一般的だと思いますよ。 > > 値の取得については、以下ページが参考になりますので、こちらを見てみてはいかがですか? > > > http://www.vba-ie.net/element/tagvalue.html はい、 http://www.vba-ie.net/element/idvalue.html を参考にしていますいが、id属性は引数になるので目的に叶うのですが、 大半のWEBページにおいて、絞り込んだエリアに適当なid属性がなく、 getElementById(sh2.Cells(i, 3))はオールマイティではないことが判りました。 classも同じclass名を持つ要素がサイトによって違っていたり、ということで 結局諦めてしまったわけなのです。 > あと、セル値をオブジェクトとしてセットしてみるとうまくいくかもしれません。イメージとしては以下のような感じです。 > 試したわけではないので、参考まで。 > > > Dim objDoc As Object > > Set objDoc = osh2.Cells(i, 2) > > sh1.Cells(i, 2) = objDoc ありがとうございます。これを早速試しましたが、 sh1.Cells(i, 2) = sh2.Cells(i, 3) と同じ結果になりました。オブジェクトにならない みたいです。 javascriptでいう、eval()関数のようなものでどうかと思い、 sh1.Cells(i, 2) = Application.Evaluate(sh2.Cells(i, 3)) とやってみましたが、この行で「オブジェクトが必要です」 エラーとなりました。 Dim objDoc As IHTMLDOMNode Set objDoc = sh2.Cells(i, 3) sh1.Cells(i, 2) = objDoc を試してみようとしましたが、 「こんぱいるえらー:ユーザー定義型は定義されていません」 となりました。参照設定が足りないと思われますが、 何を参照したらよいか解らなくて。。。。 スマートではないですが、とりあえずは現在動いている Select Case構文で進めることとにします。 |
上のメッセージを削除します。
よければパスワードを入力し、削除ボタンをクリックしてください。