IE操作でのメール送信

最近の書き込み件数: 今日 0件、昨日 0件
未読分:45件

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)


Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

Message#45 2017年1月25日(水)08時59分
From: ジャッカル
返事 削除 変更
エラーになるってことはオブジェクトがしっかり認識していないってことじゃないのかな?
ちゃんとieつかめてる?

> この教本そのまま起動させると、
> 「 Set htdoc = ie.document」
> の場所でエラーになります。なぜだがわかりますでしょうか?

Message#44 2017年1月22日(日)13時41分
From: nazo
返事 削除 変更
この教本そのまま起動させると、
「 Set htdoc = ie.document」
の場所でエラーになります。なぜだがわかりますでしょうか?

Message#43 2015年12月17日(木)13時54分
From: 気ずる
返事 削除 変更
この方法はブラウザ操作からメール送信する方法なんで、添付ファイルをブラウザのセキュリティ上操作はむずかしいでしょうね。

前に提案していたVBAから直接送信させると添付ファイルできたと思いますよ。



hiroyukiのメッセージ(#42)への返事

> yahooメール送信まででき参考になります。
> このプログラムをみて本文も送信しようと試行錯誤してやってみましたが、どうにもうまくいきません。
>
> 本文と添付ファイルをつけて送信するにはどうすればよいのでしょうか?ご教授ください。

Message#42 2015年12月15日(火)23時09分
From: hiroyuki
返事 削除 変更
yahooメール送信まででき参考になります。
このプログラムをみて本文も送信しようと試行錯誤してやってみましたが、どうにもうまくいきません。

本文と添付ファイルをつけて送信するにはどうすればよいのでしょうか?ご教授ください。

Message#41 2015年12月15日(火)23時01分
From: hiroyuki
返事 削除 変更
VBAマスターのメッセージ(#39)への返事

> こちらで試してみてください。
>
>
> Sub yahoo()
> Dim ie As InternetExplorer
>
> Set ie = CreateObject("internetExplorer.Application")
> ie.Visible = True
> ie.navigate "https://jp.mg5.mail.yahoo.co.jp/neo/launch?.rand=64q38e8rjip34#tb=w8o0z9sc"
> Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE
> DoEvents
> Loop
>
> '2秒待ち
> Call WaitFor(2)
>
> 'メールの作成クリック
> For Each objLink In ie.document.Links
> If InStr(objLink.outerHTML, "メールの作成") > 0 Then
> objLink.Click
> Exit For
> End If
> Next
>
> '2秒待ち
> Call WaitFor(2)
>
> '宛先入力
> ie.document.getElementById("to-field").value = "xxx"
>
> '2秒待ち
> Call WaitFor(2)
> SendKeys "{TAB}"
>
> '件名入力
> ie.document.getElementById("subject-field").value = "件名"
>
> '2秒待ち
> Call WaitFor(2)
>
> '送信クリック
> For Each objLink In ie.document.Links
> If InStr(objLink.outerHTML, "送信") > 0 Then
> objLink.Click
> Exit For
> End If
> Next
>
> End Sub
>
>
>
>
> '指定した秒だけ停止する関数
> Sub WaitFor(ByVal second As Integer)
> Dim futureTime As Date
>
> futureTime = DateAdd("s", second, Now)
> While Now < futureTime
> DoEvents
> Wend
> End Sub

Message#40 2015年10月17日(土)09時25分
From: 菊池 幸之介
返事 削除 変更
VBAマスターのメッセージ(#39)への返事

> こちらで試してみてください。
>
>
> Sub yahoo()
> Dim ie As InternetExplorer
>
> Set ie = CreateObject("internetExplorer.Application")
> ie.Visible = True
> ie.navigate "https://jp.mg5.mail.yahoo.co.jp/neo/launch?.rand=64q38e8rjip34#tb=w8o0z9sc"
> Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE
> DoEvents
> Loop
>
> '2秒待ち
> Call WaitFor(2)
>
> 'メールの作成クリック
> For Each objLink In ie.document.Links
> If InStr(objLink.outerHTML, "メールの作成") > 0 Then
> objLink.Click
> Exit For
> End If
> Next
>
> '2秒待ち
> Call WaitFor(2)
>
> '宛先入力
> ie.document.getElementById("to-field").value = "xxx"
>
> '2秒待ち
> Call WaitFor(2)
> SendKeys "{TAB}"
>
> '件名入力
> ie.document.getElementById("subject-field").value = "件名"
>
> '2秒待ち
> Call WaitFor(2)
>
> '送信クリック
> For Each objLink In ie.document.Links
> If InStr(objLink.outerHTML, "送信") > 0 Then
> objLink.Click
> Exit For
> End If
> Next
>
> End Sub
>
>
>
>
> '指定した秒だけ停止する関数
> Sub WaitFor(ByVal second As Integer)
> Dim futureTime As Date
>
> futureTime = DateAdd("s", second, Now)
> While Now < futureTime
> DoEvents
> Wend
> End Sub

こちらのコードで実行しましたところ、送信できました!
ありがとうございます!

VBAマスターさん、気ずるさん、的確な助言を頂きありがとうございました。
とても勉強になります。

また、解決して頂いて早々ですみませんが
サイト上から値を抽出するプログラムの件で新規スレッドを立てさせて頂きますので
お力を貸して頂けたら幸いです。
よろしくお願い致します。

Message#39 2015年10月17日(土)03時52分
From: VBAマスター
返事 削除 変更
こちらで試してみてください。


Sub yahoo()
Dim ie As InternetExplorer

Set ie = CreateObject("internetExplorer.Application")
ie.Visible = True
ie.navigate "https://jp.mg5.mail.yahoo.co.jp/neo/launch?.rand=64q38e8rjip34#tb=w8o0z9sc"
Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE
DoEvents
Loop

'2秒待ち
Call WaitFor(2)

'メールの作成クリック
For Each objLink In ie.document.Links
If InStr(objLink.outerHTML, "メールの作成") > 0 Then
objLink.Click
Exit For
End If
Next

'2秒待ち
Call WaitFor(2)

'宛先入力
ie.document.getElementById("to-field").value = "xxx"

'2秒待ち
Call WaitFor(2)
SendKeys "{TAB}"

'件名入力
ie.document.getElementById("subject-field").value = "件名"

'2秒待ち
Call WaitFor(2)

'送信クリック
For Each objLink In ie.document.Links
If InStr(objLink.outerHTML, "送信") > 0 Then
objLink.Click
Exit For
End If
Next

End Sub




'指定した秒だけ停止する関数
Sub WaitFor(ByVal second As Integer)
Dim futureTime As Date

futureTime = DateAdd("s", second, Now)
While Now < futureTime
DoEvents
Wend
End Sub

Message#38 2015年10月16日(金)22時18分
From: 菊池 幸之介
返事 削除 変更
菊池 幸之介のメッセージ(#37)への返事

> > メアドの前の部分はxxxでいいので、処理しているコードをそのままはりつけてみてください。


メアドの部分は
xxx@ezweb.ne.jp
です。

よろしくお願いします。

Message#37 2015年10月16日(金)22時09分
From: 菊池 幸之介
返事 削除 変更
> メアドの前の部分はxxxでいいので、処理しているコードをそのままはりつけてみてください。


こちらがソースになります。
よろしくお願いします。

Sub yahoo()
Dim ie As InternetExplorer

Set ie = CreateObject("internetExplorer.Application")
ie.Visible = True
ie.navigate "https://jp.mg5.mail.yahoo.co.jp/neo/launch?.rand=64q38e8rjip34#tb=w8o0z9sc"
Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE
DoEvents
Loop

'2秒待ち
Call WaitFor(2)

'メールの作成クリック
For Each objLink In ie.document.Links
If InStr(objLink.outerHTML, "メールの作成") > 0 Then
objLink.Click
Exit For
End If
Next

'2秒待ち
Call WaitFor(2)

'宛先入力
ie.document.getElementById("to-field").Value = "xxx"

'2秒待ち
Call WaitFor(2)

'件名入力
ie.document.getElementById("subject-field").Value = "件名"

'2秒待ち
Call WaitFor(2)

'送信クリック
For Each objLink In ie.document.Links
If InStr(objLink.outerHTML, "送信") > 0 Then
objLink.Click
Exit For
End If
Next

End Sub




'指定した秒だけ停止する関数
Sub WaitFor(ByVal second As Integer)
Dim futureTime As Date

futureTime = DateAdd("s", second, Now)
While Now < futureTime
DoEvents
Wend
End Sub

Message#36 2015年10月16日(金)18時03分
From: VBAマスター
返事 削除 変更
> 携帯のメールアドレスを入力していたのでgmailの方で試してみましたが同じでした。

メアドの前の部分はxxxでいいので、処理しているコードをそのままはりつけてみてください。

Message#35 2015年10月16日(金)17時29分
From: 菊池 幸之介
返事 削除 変更
> 色々なドメインのアドレスをいれても同じですか?


携帯のメールアドレスを入力していたのでgmailの方で試してみましたが同じでした。

Message#34 2015年10月16日(金)14時17分
From: VBAマスター
返事 削除 変更
菊池 幸之介のメッセージ(#32)への返事

> > ということは宛名入力部分が問題ですね。
> > 自動入力したあとに、msgBox ie.document.getElementById("to-field").Valueで
> > データが入力されているか確認してみてください。
> > 入力したデータが取得できれば問題ないということですが、それでも無理な場合は、
> > ちょっと原因が分からないですね。
>
>
> msgBox ie.document.getElementById("to-field").Valueで確認しましたところ、
> 正しい宛名がmsgboxに表示されましたがはやり送信はできないようです。

色々なドメインのアドレスをいれても同じですか?

Message#33 2015年10月16日(金)10時44分
From: 菊池 幸之介
返事 削除 変更
> あと、問題があるとするとIEのバージョンかな
> バージョン10にするなどバージョンを変更してうまくいくかもしれない。


IEバージョン10にしましたがサイト上で互換性のメッセージが出てきました。

Message#32 2015年10月16日(金)10時42分
From: 菊池 幸之介
返事 削除 変更
> ということは宛名入力部分が問題ですね。
> 自動入力したあとに、msgBox ie.document.getElementById("to-field").Valueで
> データが入力されているか確認してみてください。
> 入力したデータが取得できれば問題ないということですが、それでも無理な場合は、
> ちょっと原因が分からないですね。


msgBox ie.document.getElementById("to-field").Valueで確認しましたところ、
正しい宛名がmsgboxに表示されましたがはやり送信はできないようです。

Message#31 2015年10月15日(木)20時21分
From: 気ずる
返事 削除 変更
> Excelのバージョンは32bitでした。

あと、問題があるとするとIEのバージョンかな
バージョン10にするなどバージョンを変更してうまくいくかもしれない。

Message#30 2015年10月15日(木)17時58分
From: VBAマスター
返事 削除 変更
> @宛名自動入力、送信手動クリック
> →できませんでした。
>
> A宛名手動入力、送信自動クリック
> →できました。
>
> 送信ボタンの自動クリックはできていました!
> 宛名自動入力に問題があるのでしょうか。

ということは宛名入力部分が問題ですね。
自動入力したあとに、msgBox ie.document.getElementById("to-field").Valueで
データが入力されているか確認してみてください。
入力したデータが取得できれば問題ないということですが、それでも無理な場合は、
ちょっと原因が分からないですね。

Message#29 2015年10月15日(木)16時14分
From: 菊池 幸之介
返事 削除 変更
気ずるのメッセージ(#27)への返事

> 環境は問題ないように思えるけど、エクセルは64ビット版使ってます?
> 64ビット版は不具合が多いので、可能であれば32ビット版に変更したほうがいいですよ。


Excelのバージョンは32bitでした。

Message#28 2015年10月15日(木)16時07分
From: 菊池 幸之介
返事 削除 変更
VBAマスターのメッセージ(#26)への返事

> まずは、宛名入力が原因なのか、送信クリックが原因なのか分ける必要があるので、
>
> @宛名自動入力、送信手動クリック
> A宛名手動入力、送信自動クリック
>
> でどちらができないのか確認してみてください。


@宛名自動入力、送信手動クリック
→できませんでした。

A宛名手動入力、送信自動クリック
→できました。

送信ボタンの自動クリックはできていました!
宛名自動入力に問題があるのでしょうか。

Message#27 2015年10月15日(木)11時15分
From: 気ずる
返事 削除 変更
> 他のメールアドレスでも同じメッセージが出ました。
>
> OSはWindows7、IEバージョンは11、Excelは2013です。

環境は問題ないように思えるけど、エクセルは64ビット版使ってます?
64ビット版は不具合が多いので、可能であれば32ビット版に変更したほうがいいですよ。

Message#26 2015年10月15日(木)06時48分
From: VBAマスター
返事 削除 変更
まずは、宛名入力が原因なのか、送信クリックが原因なのか分ける必要があるので、

@宛名自動入力、送信手動クリック
A宛名手動入力、送信自動クリック

でどちらができないのか確認してみてください。




菊池 幸之介のメッセージ(#19)への返事

> 気ずるのメッセージ(#18)への返事
>
> > 「<a href="/app/minty/sendconfirm" title="メールを送信 [Ctrl+Enter]" role="button" id="yui_3_2_0_1_14446958245284057">送信</a>」のid部分が抜けているから一緒かまでは判断できないかも。
> > for eachのexit forを消して他にも同じ条件のリンクがないか確認してみたらどうですか?
>
>
> for eachのexit forを消して実行してみましたところ、1つ目のmsgboxで、
> <a title="メールを送信 [Ctrl+Enter]" role="button" href="/app/minty/sendconfirm">送信</a>
> が表示され、2つ目のmsgboxで、
> <a tabindex="-1" title="送信済みメールフォルダー内のメール数:0件" class="rapid-noclick-resp" role="option" href="#" data-action="navigate" data-ylk="sec:fol_list" data-sec="fol_lst" data-rapid_p="5"><i>送信済みメール</i></a>
> が表示されました。

Message#25 2015年10月14日(水)22時23分
From: 菊池 幸之介
返事 削除 変更
気ずるのメッセージ(#24)への返事

> > 「To:欄にあて先を入力してください。」というメッセージはあて先に何も入力しないで送信しようとすると出るようです。
>
> 確かに何もいれないと同じメッセージがでますね。
> Toにたしかにメアドが自動入力されているんですよね?
> 別のメアドを入れても同じですか?
>
> こっちでやるとやはりうまくいくので環境のせいかもしれません。
> OS,IE、エクセルのバージョン何利用してます?


他のメールアドレスでも同じメッセージが出ました。

OSはWindows7、IEバージョンは11、Excelは2013です。

Message#24 2015年10月14日(水)21時32分
From: 気ずる
返事 削除 変更
> 「To:欄にあて先を入力してください。」というメッセージはあて先に何も入力しないで送信しようとすると出るようです。

確かに何もいれないと同じメッセージがでますね。
Toにたしかにメアドが自動入力されているんですよね?
別のメアドを入れても同じですか?

こっちでやるとやはりうまくいくので環境のせいかもしれません。
OS,IE、エクセルのバージョン何利用してます?

Message#23 2015年10月14日(水)20時41分
From: 菊池 幸之介
返事 削除 変更
気ずるのメッセージ(#22)への返事

> > 処理間隔を空けてみましたが同じく「To:欄にあて先を入力してください。」と出ました。
>
> ie.document.getElementById("to-field").Value = "宛先"
>
> のあて先にちゃんとしたアドレス入力しましたか?
> もしかしたらメアドチェックしていてメアドじゃないやつはそのようなメッセージがでるのかもしれないですね。


はい、あて先には正しいものを入れました。

もしあて先に正しくないものを入れて送信ボタンを押したとしますと、
「有効なメールアドレスではありません。正しい形式のメールアドレス(例:yahootaro@yahoo.co.jp)か、Yahoo!アドレスブックに登録している愛称を使用してください。」
というメッセージが出ます。

「To:欄にあて先を入力してください。」というメッセージはあて先に何も入力しないで送信しようとすると出るようです。

あて先には正しいものが入力されているのですがサイト上では何も入力されていないという判定になっているのでしょうか。

Message#22 2015年10月14日(水)19時52分
From: 気ずる
返事 削除 変更
> 処理間隔を空けてみましたが同じく「To:欄にあて先を入力してください。」と出ました。

ie.document.getElementById("to-field").Value = "宛先"

のあて先にちゃんとしたアドレス入力しましたか?
もしかしたらメアドチェックしていてメアドじゃないやつはそのようなメッセージがでるのかもしれないですね。

Message#21 2015年10月14日(水)18時42分
From: 菊池 幸之介
返事 削除 変更
気ずるのメッセージ(#20)への返事

> > for eachのexit forを消して実行してみましたところ、1つ目のmsgboxで、
> > <a title="メールを送信 [Ctrl+Enter]" role="button" href="/app/minty/sendconfirm">送信</a>
> > が表示され、2つ目のmsgboxで、
> > <a tabindex="-1" title="送信済みメールフォルダー内のメール数:0件" class="rapid-noclick-resp" role="option" href="#" data-action="navigate" data-ylk="sec:fol_list" data-sec="fol_lst" data-rapid_p="5"><i>送信済みメール</i></a>
> > が表示されました。
>
> ということは、1つ目のリンクはおそらく送信ボタンでしょうってことで記述してあるやつコピペしてやってみたらうまく送信されましたよ。
>
> 処理間隔をもう少し長くしたらどうですか?


処理間隔を空けてみましたが同じく「To:欄にあて先を入力してください。」と出ました。

気ずるさんはできたということは私のPCの設定の問題なのでしょうか。。

Message#20 2015年10月14日(水)16時48分
From: 気ずる
返事 削除 変更
> for eachのexit forを消して実行してみましたところ、1つ目のmsgboxで、
> <a title="メールを送信 [Ctrl+Enter]" role="button" href="/app/minty/sendconfirm">送信</a>
> が表示され、2つ目のmsgboxで、
> <a tabindex="-1" title="送信済みメールフォルダー内のメール数:0件" class="rapid-noclick-resp" role="option" href="#" data-action="navigate" data-ylk="sec:fol_list" data-sec="fol_lst" data-rapid_p="5"><i>送信済みメール</i></a>
> が表示されました。

ということは、1つ目のリンクはおそらく送信ボタンでしょうってことで記述してあるやつコピペしてやってみたらうまく送信されましたよ。

処理間隔をもう少し長くしたらどうですか?

Message#19 2015年10月14日(水)15時44分
From: 菊池 幸之介
返事 削除 変更
気ずるのメッセージ(#18)への返事

> 「<a href="/app/minty/sendconfirm" title="メールを送信 [Ctrl+Enter]" role="button" id="yui_3_2_0_1_14446958245284057">送信</a>」のid部分が抜けているから一緒かまでは判断できないかも。
> for eachのexit forを消して他にも同じ条件のリンクがないか確認してみたらどうですか?


for eachのexit forを消して実行してみましたところ、1つ目のmsgboxで、
<a title="メールを送信 [Ctrl+Enter]" role="button" href="/app/minty/sendconfirm">送信</a>
が表示され、2つ目のmsgboxで、
<a tabindex="-1" title="送信済みメールフォルダー内のメール数:0件" class="rapid-noclick-resp" role="option" href="#" data-action="navigate" data-ylk="sec:fol_list" data-sec="fol_lst" data-rapid_p="5"><i>送信済みメール</i></a>
が表示されました。

Message#18 2015年10月14日(水)13時57分
From: 気ずる
返事 削除 変更
菊池 幸之介のメッセージ(#17)への返事

> 気ずるのメッセージ(#16)への返事
>
> すみません
> msgbox objLink.outerHTML でメッセージ表示させたところ、
> <a title="メールを送信 [Ctrl+Enter]" role="button"href="/app/minty/sendconrirm">送信</a>
> と出ました。

「<a href="/app/minty/sendconfirm" title="メールを送信 [Ctrl+Enter]" role="button" id="yui_3_2_0_1_14446958245284057">送信</a>」のid部分が抜けているから一緒かまでは判断できないかも。
for eachのexit forを消して他にも同じ条件のリンクがないか確認してみたらどうですか?

Message#17 2015年10月14日(水)12時36分
From: 菊池 幸之介
返事 削除 変更
気ずるのメッセージ(#16)への返事

すみません
msgbox objLink.outerHTML でメッセージ表示させたところ、
<a title="メールを送信 [Ctrl+Enter]" role="button"href="/app/minty/sendconrirm">送信</a>
と出ました。

送信ボタンの要素は取れているということでしょうか。

> 質問の答えがちょっとずれてるような気がする。
>
> 多分、VBAマスターさんは、msgbox objLink.outerHTML なんかで中身を確認してみて、
> ちゃんと「<a href="/app/minty/sendconfirm" title="メールを送信 [Ctrl+Enter]" role="button" id="yui_3_2_0_1_14446958245284057">送信</a>」の部分なのか確認してみろっていってるんじゃないかい?
> いくらソースを見てもオブジェクトが違う要素を取得していたら送信ボタンは押されていないことになる。

Message#16 2015年10月14日(水)08時27分
From: 気ずる
返事 削除 変更
質問の答えがちょっとずれてるような気がする。

多分、VBAマスターさんは、msgbox objLink.outerHTML なんかで中身を確認してみて、
ちゃんと「<a href="/app/minty/sendconfirm" title="メールを送信 [Ctrl+Enter]" role="button" id="yui_3_2_0_1_14446958245284057">送信</a>」の部分なのか確認してみろっていってるんじゃないかい?
いくらソースを見てもオブジェクトが違う要素を取得していたら送信ボタンは押されていないことになる。

Message#15 2015年10月14日(水)02時07分
From: 菊池 幸之介
返事 削除 変更
VBAマスターのメッセージ(#14)への返事

送信ボタンのobjLink.outerHTMLですが「送信」キーワードでソースを検索してもなく、それらしい要素もないようです。
「送信」ボタンは「メールの作成」ボタンの隣にあるのですがソース上だと抜けているようです。
ボタンを図で表しますと、このような感じです。
メール作成-------送信--下書きを保存--署名--キャンセル
↑ハイフンはスペース
ボタンは「メール作成」、「送信」、「下書きを保存」、「署名」、「キャンセル」があり
「メール作成」はソース上にあり、「送信」、「下書きを保存」、「署名」、「キャンセル」は検索したのですがソース上にないようです。


「送信済メール」をクリックしてみたところ通常通りクリックできましたので「送信済メール」の要素で間違いないようです。

> > ページのソースを探しても「送信」ボタンのようなところが見つかりませんでした。
> > 「送信済みメール」の文言はありました。
>
> objLink.outerHTMLはどのような値でしたか?
>
> 「送信」ボタンと同じ値か確認してみてください。
>
> 要素検証とページソースは必ずしも完全一致ではありません。

Message#14 2015年10月14日(水)00時56分
From: VBAマスター
返事 削除 変更
> ページのソースを探しても「送信」ボタンのようなところが見つかりませんでした。
> 「送信済みメール」の文言はありました。

objLink.outerHTMLはどのような値でしたか?

「送信」ボタンと同じ値か確認してみてください。

要素検証とページソースは必ずしも完全一致ではありません。

Message#13 2015年10月13日(火)17時30分
From: 菊池 幸之介
返事 削除 変更
VBAマスターのメッセージ(#12)への返事

Crhomeで「送信」ボタンの要素検証をすると
<a href="/app/minty/sendconfirm" title="メールを送信 [Ctrl+Enter]" role="button" id="yui_3_2_0_1_14446958245284057">送信</a>
となっているのですが
ページのソースを探しても「送信」ボタンのようなところが見つかりませんでした。
「送信済みメール」の文言はありました。

要素検証とページのソースは違うのでしょうか。

> > '送信クリック
> > For Each objLink In ie.document.Links
> > If InStr(objLink.outerHTML, "送信") > 0 Then
> > objLink.click
> > Exit For
> > End If
> > Next
>
> objLink.outerHTMLの中身を見て「送信」リンクの部分なのか確認してみてください。
> 他の場所に「送信」の文言があれば最初に出現したリンクをクリックします。

Message#12 2015年10月13日(火)16時59分
From: VBAマスター
返事 削除 変更
> '送信クリック
> For Each objLink In ie.document.Links
> If InStr(objLink.outerHTML, "送信") > 0 Then
> objLink.click
> Exit For
> End If
> Next

objLink.outerHTMLの中身を見て「送信」リンクの部分なのか確認してみてください。
他の場所に「送信」の文言があれば最初に出現したリンクをクリックします。

Message#11 2015年10月13日(火)16時39分
From: 菊池 幸之介
返事 削除 変更
菊池 幸之介のメッセージ(#10)への返事

yahooメール画面へ行き、メールの作成をクリック、宛先入力、件名入力まで行い、最後に送信をクリックしているつもりなのですが、メール上のメッセージで「To:欄にあて先を入力してください。」と出ます。
ちなみにあて先は入力している状態で出ます。
手動で「送信」をクリックしてみると通常通り送信出来そうです。

クリックしている場所が違うのでしょうか。

回答のほど、よろしくお願いします。

コードはこちらです。
Sub yahoo()
Dim ie As InternetExplorer

Set ie = CreateObject("internetExplorer.Application")
ie.Visible = True
ie.navigate "https://jp.mg5.mail.yahoo.co.jp/neo/launch?.rand=64q38e8rjip34#tb=w8o0z9sc"
Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE
DoEvents
Loop

'2秒待ち
Call WaitFor(2)

'メールの作成クリック
For Each objLink In ie.document.Links
If InStr(objLink.outerHTML, "メールの作成") > 0 Then
objLink.click
Exit For
End If
Next

'2秒待ち
Call WaitFor(2)

'宛先入力
ie.document.getElementById("to-field").Value = "宛先"

'2秒待ち
Call WaitFor(2)

'件名入力
ie.document.getElementById("subject-field").Value = "件名"

'2秒待ち
Call WaitFor(2)

'送信クリック
For Each objLink In ie.document.Links
If InStr(objLink.outerHTML, "送信") > 0 Then
objLink.click
Exit For
End If
Next

End Sub




'指定した秒だけ停止する関数
Sub WaitFor(ByVal second As Integer)
Dim futureTime As Date

futureTime = DateAdd("s", second, Now)
While Now < futureTime
DoEvents
Wend
End Sub



> VBAマスターのメッセージ(#8)への返事
>
> VBAマスターさんのやり方でできました!感動です!
> ありがとうございます。
>
> 完成形を載せておきます。
> Sub yahoo()
> Dim ie As InternetExplorer
> Dim i As Long
>
> Set ie = CreateObject("internetExplorer.Application")
> ie.Visible = True
> ie.navigate "https://jp.mg5.mail.yahoo.co.jp/neo/launch?.rand=64q38e8rjip34#tb=w8o0z9sc"
> Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE
> DoEvents
> Loop
>
> Call WaitFor(2)
>
> For Each objLink In ie.document.Links
>
> If InStr(objLink.outerHTML, "メールの作成") > 0 Then
>
> objLink.Click
>
> Exit For
>
> End If
>
> Next
>
>
> End Sub
>
>
> '指定した秒だけ停止する関数
> Sub WaitFor(ByVal second As Integer)
> Dim futureTime As Date
>
> futureTime = DateAdd("s", second, Now)
> While Now < futureTime
> DoEvents
> Wend
> End Sub
>
>
> > > aタグをクリックするやり方がわからないのですがもしお分かりでしたら教えて頂けますでしょうか。
> >
> > aタグに限らず、InStr関数で位置情報を取得し、位置が確認できたオブジェクトに対して処理をするというのが一般的な処理になります。
> >
> >
> > For Each objLink In objIE.document.Links
> >
> > If InStr(objLink.outerHTML, "メールの作成") > 0 Then
> >
> > objLink.Click
> >
> > Call ieCheck(objIE)
> >
> > Exit For
> >
> > End If
> >
> > Next

Message#10 2015年10月13日(火)15時12分
From: 菊池 幸之介
返事 削除 変更
VBAマスターのメッセージ(#8)への返事

VBAマスターさんのやり方でできました!感動です!
ありがとうございます。

完成形を載せておきます。
Sub yahoo()
Dim ie As InternetExplorer
Dim i As Long

Set ie = CreateObject("internetExplorer.Application")
ie.Visible = True
ie.navigate "https://jp.mg5.mail.yahoo.co.jp/neo/launch?.rand=64q38e8rjip34#tb=w8o0z9sc"
Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE
DoEvents
Loop

Call WaitFor(2)

For Each objLink In ie.document.Links

If InStr(objLink.outerHTML, "メールの作成") > 0 Then

objLink.Click

Exit For

End If

Next


End Sub


'指定した秒だけ停止する関数
Sub WaitFor(ByVal second As Integer)
Dim futureTime As Date

futureTime = DateAdd("s", second, Now)
While Now < futureTime
DoEvents
Wend
End Sub


> > aタグをクリックするやり方がわからないのですがもしお分かりでしたら教えて頂けますでしょうか。
>
> aタグに限らず、InStr関数で位置情報を取得し、位置が確認できたオブジェクトに対して処理をするというのが一般的な処理になります。
>
>
> For Each objLink In objIE.document.Links
>
> If InStr(objLink.outerHTML, "メールの作成") > 0 Then
>
> objLink.Click
>
> Call ieCheck(objIE)
>
> Exit For
>
> End If
>
> Next

Message#9 2015年10月13日(火)14時46分
From: 菊池 幸之介
返事 削除 変更
気ずるのメッセージ(#6)への返事

ありがとうございます。

調べてやってみようと思います。


> うーん、aタグのクリックの仕方も分からなかったらその後の処理も多分難しいんじゃないですかね。
>
> getElementByIdの使い方も間違っていたようですし。
>
> とりあえずaタグの処理は↓で説明しているので、こっちを最初に理解した方が後の作業の近道ですよ。
>
> http://www.vba-ie.net/element/linkclick.html
>
>
> > ありがとうございます。
> > この書き方だと実際にクリックしているのはspanタグなのですね。
> >
> > aタグをクリックするやり方がわからないのですがもしお分かりでしたら教えて頂けますでしょうか。
> >
> > > > > > ie.document.getElementById("main-btn-new").Click
> > >
> > > これ実際にクリックしているのはspanタグだからちゃんとaタグをクリックするようにしたらいけるんじゃない?
> > >
> > > spanタグはaタグを包括しているけど、たまにクリックできないサイトもある。

Message#8 2015年10月13日(火)14時35分
From: VBAマスター
返事 削除 変更
> aタグをクリックするやり方がわからないのですがもしお分かりでしたら教えて頂けますでしょうか。

aタグに限らず、InStr関数で位置情報を取得し、位置が確認できたオブジェクトに対して処理をするというのが一般的な処理になります。


For Each objLink In objIE.document.Links

If InStr(objLink.outerHTML, "メールの作成") > 0 Then

objLink.Click

Call ieCheck(objIE)

Exit For

End If

Next

Message#7 2015年10月13日(火)10時15分
From: 気ずる
返事 削除 変更
あと、メール送信ならわざわざブラウザ操作するよりVBAでメール送信したほうが早い気がするんで、そちらを模索したほうがいいと思いますよ。

Message#6 2015年10月13日(火)10時13分
From: 気ずる
返事 削除 変更
うーん、aタグのクリックの仕方も分からなかったらその後の処理も多分難しいんじゃないですかね。

getElementByIdの使い方も間違っていたようですし。

とりあえずaタグの処理は↓で説明しているので、こっちを最初に理解した方が後の作業の近道ですよ。

http://www.vba-ie.net/element/linkclick.html


> ありがとうございます。
> この書き方だと実際にクリックしているのはspanタグなのですね。
>
> aタグをクリックするやり方がわからないのですがもしお分かりでしたら教えて頂けますでしょうか。
>
> > > > > ie.document.getElementById("main-btn-new").Click
> >
> > これ実際にクリックしているのはspanタグだからちゃんとaタグをクリックするようにしたらいけるんじゃない?
> >
> > spanタグはaタグを包括しているけど、たまにクリックできないサイトもある。

Message#5 2015年10月13日(火)09時36分
From: 菊池 幸之介
返事 削除 変更
気ずるのメッセージ(#4)への返事

ありがとうございます。
この書き方だと実際にクリックしているのはspanタグなのですね。

aタグをクリックするやり方がわからないのですがもしお分かりでしたら教えて頂けますでしょうか。

> > > > ie.document.getElementById("main-btn-new").Click
>
> これ実際にクリックしているのはspanタグだからちゃんとaタグをクリックするようにしたらいけるんじゃない?
>
> spanタグはaタグを包括しているけど、たまにクリックできないサイトもある。

Message#4 2015年10月12日(月)23時05分
From: 気ずる
返事 削除 変更
> > > ie.document.getElementById("main-btn-new").Click

これ実際にクリックしているのはspanタグだからちゃんとaタグをクリックするようにしたらいけるんじゃない?

spanタグはaタグを包括しているけど、たまにクリックできないサイトもある。

Message#3 2015年10月12日(月)22時12分
From: 菊池 幸之介
返事 削除 変更
ジャッカルのメッセージ(#2)への返事

はい、
ie.document.getElementById("main-btn-new")(0).Click
ですとエラーがでて、
ie.document.getElementById("main-btn-new").Click
に変更したところエラーはでず、反応なしでした。

> 他の人わけがわからないかもしれませんが、
>
> > > ie.document.getElementById("main-btn-new")(0).Click
>
> をie.document.getElementById("main-btn-new").Click
>
> にしてもだめでした?
>
> > IE操作をして
> > ・yahooのメール画面へ行く
> > ・「メールの作成」をクリック
> > ・「to」、「件名」を入力
> > ・「送信」をクリック
> > ということをしたいのですが、
> >
> > 下記のコードで「メールの作成」をクリックしたいのですが
> > ie.document.getElementById("main-btn-new").Click
> > で反応がない状態です。
> >
> > お分かりになる方、お教えいただけますでしょうか。
> >
> > Sub yahoo()
> > Dim ie As InternetExplorer
> > Dim i As Long
> >
> > Set ie = CreateObject("internetExplorer.Application")
> > ie.Visible = True
> > ie.navigate
> > 'yahooメールの画面
> > "https://jp.mg5.mail.yahoo.co.jp/neo/launch?.rand=64q38e8rjip34#tb=w8o0z9sc"
> > Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE
> > DoEvents
> > Loop
> >
> > Call WaitFor(2)
> >
> > ie.document.getElementById("main-btn-new").Click
> >
> >
> > End Sub
> >
> >
> > '指定した秒だけ停止する関数
> > Sub WaitFor(ByVal second As Integer)
> > Dim futureTime As Date
> >
> > futureTime = DateAdd("s", second, Now)
> > While Now < futureTime
> > DoEvents
> > Wend
> > End Sub

Message#2 2015年10月12日(月)20時22分
From: ジャッカル
返事 削除 変更
他の人わけがわからないかもしれませんが、

> > ie.document.getElementById("main-btn-new")(0).Click

をie.document.getElementById("main-btn-new").Click

にしてもだめでした?

> IE操作をして
> ・yahooのメール画面へ行く
> ・「メールの作成」をクリック
> ・「to」、「件名」を入力
> ・「送信」をクリック
> ということをしたいのですが、
>
> 下記のコードで「メールの作成」をクリックしたいのですが
> ie.document.getElementById("main-btn-new").Click
> で反応がない状態です。
>
> お分かりになる方、お教えいただけますでしょうか。
>
> Sub yahoo()
> Dim ie As InternetExplorer
> Dim i As Long
>
> Set ie = CreateObject("internetExplorer.Application")
> ie.Visible = True
> ie.navigate
> 'yahooメールの画面
> "https://jp.mg5.mail.yahoo.co.jp/neo/launch?.rand=64q38e8rjip34#tb=w8o0z9sc"
> Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE
> DoEvents
> Loop
>
> Call WaitFor(2)
>
> ie.document.getElementById("main-btn-new").Click
>
>
> End Sub
>
>
> '指定した秒だけ停止する関数
> Sub WaitFor(ByVal second As Integer)
> Dim futureTime As Date
>
> futureTime = DateAdd("s", second, Now)
> While Now < futureTime
> DoEvents
> Wend
> End Sub

Message#1 2015年10月12日(月)18時22分
From: 菊池 幸之介
返事 削除 変更
IE操作をして
・yahooのメール画面へ行く
・「メールの作成」をクリック
・「to」、「件名」を入力
・「送信」をクリック
ということをしたいのですが、

下記のコードで「メールの作成」をクリックしたいのですが
ie.document.getElementById("main-btn-new").Click
で反応がない状態です。

お分かりになる方、お教えいただけますでしょうか。

Sub yahoo()
Dim ie As InternetExplorer
Dim i As Long

Set ie = CreateObject("internetExplorer.Application")
ie.Visible = True
ie.navigate
'yahooメールの画面
"https://jp.mg5.mail.yahoo.co.jp/neo/launch?.rand=64q38e8rjip34#tb=w8o0z9sc"
Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE
DoEvents
Loop

Call WaitFor(2)

ie.document.getElementById("main-btn-new").Click


End Sub


'指定した秒だけ停止する関数
Sub WaitFor(ByVal second As Integer)
Dim futureTime As Date

futureTime = DateAdd("s", second, Now)
While Now < futureTime
DoEvents
Wend
End Sub

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降

VBAのIE制御についてのQ&A掲示板

↑エクセルVBAのIE(InternetExplorer)操作で分からない事があればこちらの掲示板よりご質問ください^^

ExcelのVBA初心者入門

↑こちらはExcelのVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

VBAでIE(InternetExplorer)制御の準備

エクセルVBAでIE制御の応用編

こちらでは、エクセルVBAで実際に作成したIE(InternetExplorer)制御ツールをまとめています。自動ログインや情報収集など具体的に解説しています。IE(InternetExplorer)制御をされる方は参考にしてください。

【ダウンロード】IE操作に便利なツール

こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。

IEオブジェクトのメソッド・プロパティ

こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。

IE操作に利用されているVBA関数

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。

IE操作に利用されているステートメント

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。

IE(InternetExplorer)制御のVBAコード

こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。

ExcelのVBAで作成した役立つVBAコード

こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。

dmb.cgi Ver. 1.068
Copyright(C) 1997-2014, hidekik.com