- ベストアンサー
VBAでWebページに入力&ボタンクリック
- ExcelでVBAを使い、特定のWebページのフォームに自動的に入力を行い、ボタンをクリックするマクロを作成したい。
- 入力する内容は、Excelの特定のセルに記載されている名前、メールアドレス、パスワードなどであり、指定されたURLのページ上のフォームに入力する必要がある。
- 作成したマクロは、特定のWebページで使用するため、URLがhttp://xxx.com/のページで作動するように設定したい。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
失礼しました。 objIE.document.all.Mode.Click を objIE.Document.Forms(0).Submit に置き換えてください。
その他の回答 (4)
- kokorone
- ベストアンサー率38% (417/1093)
サイトの内容については、置いておいて。。。。 なんというズボラな、設計のサイトなんだろう。 ボタンをクリックできない原因は、name="mode"という要素が3箇所も あり、特定できないからです。 解決策はもうしばらくお待ちください。。
- kokorone
- ベストアンサー率38% (417/1093)
まず、マクロです。 Private Declare Function FindWindowEx _ Lib "user32" Alias "FindWindowExA" _ (ByVal hWnd1 As Long, ByVal hWnd2 As Long _ , ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Private Declare Function GetParent _ Lib "user32" (ByVal Hwnd As Long) As Long Private Declare Sub PostMessage _ Lib "user32" Alias "PostMessageA" _ (ByVal Hwnd As Long, ByVal wMsg As Long _ , ByVal wParam As Long, ByVal lParam As Long) Private Declare Sub SetTimer Lib "user32" _ (ByVal Hwnd As Long, ByVal nIDEvent As Long _ , ByVal uElapse As Long, ByVal lpTimerFunc As Long) Private Declare Sub KillTimer Lib "user32" _ (ByVal Hwnd As Long, ByVal nIDEvent As Long) Private Const WM_CHAR As Long = &H102 Private Const BM_CLICK As Long = &HF5 Dim objIE As Object Sub web_open() Dim myURL As String Set objIE = CreateObject("InternetExplorer.application") myURL = "c:\vbtest\vbtest.html" objIE.Navigate myURL While objIE.Busy Or objIE.ReadyState <> 4 Wend End Sub Sub dataset() Call web_open objIE.Visible = True 'objIE.document.all.ボタン.Click objIE.document.all.Name.Value = "山田 太郎" objIE.document.all.Email.Value = "taro@hoge.com" objIE.document.all.pw.Value = "pass1" objIE.document.all.junle.Value = "1" objIE.document.all.Title.Value = "title1" objIE.document.all.URL.Value = "url1.cgi" objIE.document.all.Comment.Value = "comment1" objIE.document.all.Mode.Click End Sub htmlファイルです。submit の先が書かれていなかったため、actionは 自分自身としました。 セットする内容は、Excelシートから拾ってください。 vbtest.html <html> <form name="dataset" action="vbtest.html"> <input type="hidden" name="room" value="aaaaa"/> <a name="regist" id="regist">総登録数</a> <table width="402" border="1"> <tr> <th align="center" colspan="2"><div align="left"><big>登録ページ</big></div></th> </tr> <tr> <td colspan="2"> name <input type="text" size="20" name="name" value="" maxlength="20"> Email <input type="text" size="20" name="email" value=""> </td> </tr> <tr> <td align="center">pass</td> <td><input type="text" size="20" name="pw" maxlength="12" value=""></td> </tr> <tr> <td align="center">category</td> <td><select size="1" name="junle"> <option value="pp" selected="selected">カテゴリ選択</option> <option value="0">その1</option> <option value="1">その2</option> </select></td> </tr> <tr> <td align="center">title</td> <td><input type="text" size="55" name="title" maxlength="25" value=""></td> </tr> <tr> <td align="center">URL</td> <td><input type="text" size="55" name="url"></td> </tr> <tr> <td align="center">intro</td> <td><input type="text" name="comment" size="55" maxlength="50" value=""></td> </tr> <tr align="center"> <td><br></td> <td><input type="submit" name="mode" value="登録"> <input type="reset" value="クリア"></td> </tr> </table> </form> </html> これを繰り返し実行するんですよね。。 つまり、vbtest.htmlでデータ入力して、submit先で、データ処理をする。 それを何回か、繰り返すとなると、同期を取らなければならなくなりま すね。
補足
vbtest.htmlを自分で作ってやってみたところうまく動作していました。 ですが、実際のサイトURLに書き換えてやってみたところ登録ボタンを押してくれず、フォームに入力するところまでしか動作しませんでした。 実際に送りたいサイトはalinkというリンク集です。 例えば http://alink.uic.to/です。 教えて頂いたマクロで変更した部分はURL部分です。 どこを修正すればalinkで投稿できるようになるでしょうか?
- kokorone
- ベストアンサー率38% (417/1093)
すみません、私が無知でした。 VBAから、IEをコントロールできます。 参照URLを見るか、 http://www2.moug.net/app/bbs/search.php?cat=exvba&keyword=IE&mode=AND を参考にしてみてください。
補足
すでにそれらのサイトは見て回ってやってみましたが私の技術不足でうまくいきませんでした。 ページを開くところまでは動作確認しましたが、フォームには何も表示されません。 具体的な回答を希望します。
- kokorone
- ベストアンサー率38% (417/1093)
VBAは、Office製品の内部を制御することを前提に作られています。 ブラウザを制御することは、難しいでしょうね。 UWSCなど、キーロガーツールなどで、Excelからブラウザへのコピペ・ ボタン押下など実行させてみてはいかがですか?
お礼
何とか自分でできました。 いろいろ教えていただきありがとうございました。
補足
objIE.Document.Forms(0).Submitでは投稿できませんでしたが、 objIE.document.all.Mode(0).Clickで投稿できました! あと、このままでは常に同じ内容投稿となってしまうので、 エクセルのセルA1に山田 太郎,B1にtaro@***.com,C1にpass1,D1に1, E1にtitle1,F1にurl1.cgi,G1にcomment1が書いてあるときに内容を読み込んで投稿するにはどうすればいいでしょうか? objIE.document.all.Name.Value = "A1の内容"のようにしたいです。 ついでにエクセルの1行目の内容が終わると自動で2行目の内容を投稿するというようにできれば完璧なのですが・・・。