投稿日 | : 2003/04/01(Tue) 10:56 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re: IEオブジェクトのDocumentオブジェクトについて |
> '--IEオブジェクトのドキュメントを変数に格納
> Set ieDoc = ie.Document
> Debug.Print ieDoc.documentelement.outertext
> ↑ここでBODYのテキストが表示されなくて困っています
おそらく、フレームセットが原因だと思います。
1) ieDoc.frames.length の値を確認してみてください。
現在のコードのままですと、framesetが使われているページに対応できません。
もし、フレーム組みされたページの内容を取得したいのであれば、
For Eachなどを使って、framesコレクションを列挙し、個々のフレーム内の
documentプロパティを個別に取得していくようにしてみてください。
なお、フレーム内のページが、さらにframesetを使っている事もありますので、
framesコレクションの呼び出しは、再帰的に行う必要があります。
2) IEでWebページ以外の文書を開いていた場合、documentプロパティから、
IHTMLDocumentインターフェイス以外のオブジェクトが
返される可能性があります。
TypeOf演算子かTypeName関数を使って、ieDocのオブジェクトの型を
事前に調べるようにする事をお奨めします。
# なお、documentオブジェクトのdocumentElementプロパティは、IE5からの実装です。
# IE4以下の環境で動作させる事はできませんので、その点は御留意下さい。
> Public Function SetIEObject()
戻り値のデータ型が書かれていないみたいですよ。
> Dim sw As New SHDocVw.ShellWindows
既にご存知かも知れませんが、実行時バインド(late binding)で書く場合は、
Dim sw As Object
Set sw = CreateObject("Shell.Application").Windows()
で取得出来ますね。
> bWindowShowFragg = False
> For i = 0 To sw.Count - 1
変数 bWindowShowFragg、および i が宣言されていないようです。
(ところで、Fragg ではなく Flag なのでは無いでしょうか?)
> '--実行ファイルのフルパスを調べてEXEファイル名でエクスプローラーとIEを判定
> If Right(ie.FullName, 12) = "IEXPLORE.EXE" Then
FullNameプロパティが返す文字列による判定ではなく、
Documentプロパティが返すデータ型による判定をお奨めします。
現状のie.FullNameによる判定には、幾つかの問題点があるかと思います。
私の環境では、ie.FullNameが返す値として、以下のような物があります。
"C:\Program Files\Internet Explorer\iexplore.exe"
"C:\WINDOWS\Explorer.EXE"
"C:\Program Files\Microsoft Visual Studio .NET\Common7\IDE\devenv.exe"
右側12文字を取ってみると、"iexplore.exe"はあっても、"IEXPLORE.EXE"は無いのです。
これだけであれば、UCase関数で大文字化してから比較すれば対処できるのですが、
先述の(2)にも書きましたように、documentはHTML以外を返すことがありますので、
ie.FullNameだけで判定してしまうと、「IEのアドレスバーに"C:\"などと書いて開いた場合」や、
「エクスプローラのアドレスバーに、URLを指定して開いた場合」あるいは、
「IEでOffice文書を開いている場合」などに対応しきれないかと思います。