- ベストアンサー
Excel VBAでのSELECTタグの処理方法
- Excel VBAを使って、IEのSELECTタグを設定する方法について紹介します。
- 質問者がIEのSELECTタグを参考にして書いたコードに対して、実行エラー438が発生しました。
- 対応方法として、SELECTタグに付いた名前(Name)がplace_orderである場合、.SelectedIndexに5をセットするというコードを提案します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> >NO.3で私が示したURLはご覧になりましたか? > 全て読みました。 > 実験もしましたが、思わしくありませんでした。 「思わしくない」というのは具体的にどういう結果ですか? やっぱり ie.Document.all.place_order.SelectedIndex = 5 のところで実行時エラー438が出るということですか? それともそれ以前にエラーが出るんですか? > >エラーになったところで、 > >ie.Document.all > >の中身をウォッチ式で見ることができますか? > 見ましたけど、中身は空でした。 空ということは、やはりその時点でieオブジェクトが なくなってしまっている可能性は高いですね。 selectが使えないとかいう問題じゃないです。 ie.Document あるいは ie でウォッチ式を見ることはできますか? でも、その前のWaitのところでie.Busyを参照しても エラーが出ないということは、その時点ではieオブジェクトが 見えているってことになりますよね。 だからNo.3のURLが参考になるかと思ったのですが。。。
その他の回答 (4)
- nao-y
- ベストアンサー率58% (111/190)
> そもそも、Selectが使えないのではないでしょうか。 というか、エラーになる時点でIEオブジェクトが消えているということは ありませんか? エラーになったところで、 ie.Document.all の中身をウォッチ式で見ることができますか? NO.3で私が示したURLはご覧になりましたか? そこのURLでの問題も、IEオブジェクトが消えていることによるものです。 この問題の対処法も試してみてください。 あと、Excelのバージョンはいくつですか? バージョンによってはIEオブジェクトとの接続に問題が発生する場合が あるようです。Microsoftから出ているパッチをすべてあててみてください。 実際私も簡単なコードを書きましたが、Excel2007では問題なく動作しますが、 Excel2000では動作しませんでした。
補足
ご回答をいただきましてありがとうございます Excelのバージョンは、Excel2010を使っています。 >NO.3で私が示したURLはご覧になりましたか? 全て読みました。 実験もしましたが、思わしくありませんでした。 >エラーになったところで、 >ie.Document.all >の中身をウォッチ式で見ることができますか? 見ましたけど、中身は空でした。
- nao-y
- ベストアンサー率58% (111/190)
> ライブラリーの参照とか、必要ですか。 一応、「Microsoft Internet Controls」を参照設定した方がいいかも知れません。 エラー内容は違いますが、このURL↓の問題が関係しているような気もします。 http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+201012/10120040.txt
補足
一応、「Microsoft Internet Controls」を参照設定しましたが、ダメでしたねぇ。 そもそも、Selectが使えないのではないでしょうか。 でも、三流君で出来ると書いてあるしなあ~~ _| ̄|○
- nao-y
- ベストアンサー率58% (111/190)
Waitされてるんですね。 対象URLのコンテンツを読みきれていないときに実行時エラー438が 出ることがあるようですが、そのケースでは内容ですね。 参考にされているURLの他の方法 ie.Document.all.place_order.Options(5).selected = "selected" ie.Document.all.place_order.Options(5).selected = True などは試されましたか? 他の方法 ie.Document.Forms(0).Item("place_order").SelectIndex = 5 などもお試しください。 参考URL: http://www.happy2-island.com/vbs/cafe02/capter00710.shtml http://billboardtop100.net/2011/03/excel-vba-ie-internet-explorer-select-option-multiple.html
補足
ご回答ありがとうございます。 やはり、駄目でした。(T^T) 実行エラー"438"が出ます。 ライブラリーの参照とか、必要ですか。
- nao-y
- ベストアンサー率58% (111/190)
IEの表示終了を待っていますか? 具体的には、 Do while ie.Busy Loop Do Until ie.ReadyState=READYSTATE_COMPLETE Loop などの文を入れてますか?
補足
ご回答ありがとうございます。 Wait を、次のようにして予め入れています。 ' IEがビジー状態の間待ちます ' ie = Object Sub WaitIE(ie) Do While ie.Busy = True Or ie.ReadyState <> 4 'サイトが開かれるまで待つ(お約束) Do While ie.Busy = True DoEvents Loop Loop Sleep 100 End Sub
補足
何度も、ご回答をいただきまして恐縮です。 >「思わしくない」というのは具体的にどういう結果ですか? >やっぱり >ie.Document.all.place_order.SelectedIndex = 5 >のところで実行時エラー438が出るということですか? そのとおりです。 この行で、実行時エラー438が出ます。 > >の中身をウォッチ式で見ることができますか? > 見ましたけど、中身は空でした。 ie.Document.all.Item(n)に、残骸らしき文字列はありました。 >でも、その前のWaitのところでie.Busyを参照しても >エラーが出ないということは、その時点ではieオブジェクトが >見えているってことになりますよね。 そうなりますよね。 >だからNo.3のURLが参考になるかと思ったのですが。。。 もう一度、確認します。