質問

URLがhttp://xxx.com/のページで次のようなフォームのときExcelで自動入力クリックするマクロを作りたいです。
<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">&nbsp;&nbsp;&nbsp;name
<input type="text" size="20" name="name" value="" maxlength="20">
&nbsp;&nbsp;&nbsp;Email
<input type="text" size="20" name="email" value="">
&nbsp;&nbsp;</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>
入力する内容は1行目のA,B,C・・にname,email,pass・・・が順番にそれぞれ入っています。

通報する

回答 (5件)

失礼しました。
objIE.document.all.Mode.Click

objIE.Document.Forms(0).Submit
に置き換えてください。

この回答へのお礼

何とか自分でできました。
いろいろ教えていただきありがとうございました。

この回答への補足

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行目の内容を投稿するというようにできれば完璧なのですが・・・。

サイトの内容については、置いておいて。。。。
なんというズボラな、設計のサイトなんだろう。
ボタンをクリックできない原因は、name="mode"という要素が3箇所も
あり、特定できないからです。
解決策はもうしばらくお待ちください。。

まず、マクロです。
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">&nbsp;&nbsp;&nbsp;name
<input type="text" size="20" name="name" value="" maxlength="20">
&nbsp;&nbsp;&nbsp;Email
<input type="text" size="20" name="email" value="">
&nbsp;&nbsp;</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で投稿できるようになるでしょうか?

すみません、私が無知でした。
VBAから、IEをコントロールできます。
参照URLを見るか、
http://www2.moug.net/app/bbs/search.php?cat=exvb …
を参考にしてみてください。

この回答への補足

すでにそれらのサイトは見て回ってやってみましたが私の技術不足でうまくいきませんでした。
ページを開くところまでは動作確認しましたが、フォームには何も表示されません。
具体的な回答を希望します。

VBAは、Office製品の内部を制御することを前提に作られています。
ブラウザを制御することは、難しいでしょうね。
UWSCなど、キーロガーツールなどで、Excelからブラウザへのコピペ・
ボタン押下など実行させてみてはいかがですか?

このQ&Aは役に立ちましたか?1 件

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

新しく質問する

注目の記事


新しく質問する

このカテゴリの人気Q&Aランキング

毎日見よう!教えて!gooトゥディ

べんりQ&A特集