重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

はじめまして。VBAの初心者です。

現在、エクセルVBAを用いてIEにログインするコードを作っています。

で、他のページはうまくいったのですが、
https://www.wnp.waseda.jp/portal/portal.php
このホームページだけは他のページと同じやり方でやっても、フォームに文字を入力することができません。

ちなみに以下のコードを記述しましたがうまくいきませんでした。

'IEの起動
Dim objIE As Object '変数を定義します。
Set objIE = CreateObject("InternetExplorer.Application") 'オブジェクトを作成します。
objIE.Visible = True '可視、Trueで見えるようにします。

'処理したいページを表示します。
objIE.Navigate "https://www.wnp.waseda.jp/portal/portal.php"

'ページの表示完了を待ちます。
While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。
DoEvents
Wend

objIE.Document.Form1("loginid").Value ="私のID" '←ここでエラーがでます。

(1)なぜ他のHPと同じようにはいかないかという点と、できれば、(2)うまくいくコード、を教えていただければ嬉しいです。

よろしくお願いします。

A 回答 (2件)

>エクセルVBAを用いてIEにログインするコードを作っています


ということで、「コツ」と申しますか、2点ほど、基本的な「ワザ」みたいなことがあります。

1)アクセス する WEBページ の htmlソース を見る。
2)「objIE.Document」を ウォッチ式 に追加し、ステップ イン デバッグ しながら、配下の プロパティ などの値の変化を見る。


>フォームに文字を入力することができません。
 お示しの URL の ソース をご覧いただくと一目瞭然ですが、当該 ページ には

<FRAMESET ~~><FRAME ~~><FRAME ~~></FRAMESET>

というような html が書かれています。

 ここで、お尋ねの ログインページ の本当の アドレス は
src="./portalLogin.php?ERRFLAG=1&LoginID=&HID_P14=JA"
の部分に書かれていますので、

>'処理したいページを表示します。
の段階で、
objIE.Navigate "https://www.wnp.waseda.jp/portal/portal.php"
ではなくて、
objIE.Navigate "https://www.wnp.waseda.jp/portal/portalLogin.php …
としてみてください。


 次に、この ページ の htmlソース を見てみると「"ログインID"」や「"パスワード"」の周辺に「NAME="loginid"」や「NAME="passwd"」というような ソース が見て取れます。

 従って、

'処理したいページを表示します。
objIE.Navigate "https://www.wnp.waseda.jp/portal/portalLogin.php …
'ページの表示完了を待ちます。
While ~~ Wend
objIE.Document.getelementsbyname("loginid")(0).Value = "私のID"
objIE.Document.getelementsbyname("passwd")(0).Value = "私のpasswd"
objIE.Document.getelementsbyname("frmLogin")(0).submit

とした後に、再度

'処理したいページを表示します。
objIE.Navigate "https://www.wnp.waseda.jp/portal/portal.php"

としてみられたらいかがでしょうか?


 なお、私は「wnp.waseda.jp」の ID 等を有しておりませんので、これから先のことにつきましては、冒頭の(1)(2)をご参考になさってみてください。
    • good
    • 0
この回答へのお礼

理解できました!
そしてできました!
ありがとうございました!

お礼日時:2010/11/18 18:19

(1)フォーム上にないから。


(2)document.getElementsByName("loginid")(0)

この回答への補足

ご回答ありがとうございます。

objIE.Document.getElementsByName("loginid")(0).Value = 私のID

ということでしょうか?

これも試してみたのですが、うまくいきませんでした。
『実行時エラー91 オブジェクト変数またはwithブロック変数が設定されていません。』
というエラーメッセージが出てしまいます。

補足日時:2010/11/17 14:17
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!