ウィルスソフトで、IEからファイルのダウンロードが一発でできない。

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

最新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#12 2017年6月6日(火)16時28分
From: 困ってます君
返事 削除 変更
みらーさん

ありがとうございました。

できました。

このようにしたらリンクができるまで待機できました。
While Left(objIE.Document.getElementsByTagName("td")(2).innerText, 7) = "ダウンロード中"
DoEvents
Wend

またおっしゃるとおり、
APPLICATION.WAITを使ったら、
ieオブジェクトはそのままで大丈夫でした。

本当にありがとうございました!

> みらーのメッセージ(#9)への返事
>
> ありがとうございます。
>
> すでにページが遷移した後で、
> (readystateはすでに4になっている)
> 画面が30%完了、50&完了、100パーセント完了というふうに表示されていき、
> 完了したら、ダウンロードのリンクが現れます。
>
> DOCUMENTでもREADYSTATEやってみましたが、
> COMPLETEで、だめでした。
>
> ファイルの大きさによって、100%完了になる時間がちがうのですが、
> 最大3分待つようにすればいいかもしれません。
>
> また、100パーセント完了になったら、
> CLICK HERE という文字列が現れるので、
>
> While Not InStr(objie2.Document.getElementsByClassName("datatable").innerText, "Click") > 0
> DoEvents
> Wend
>
> という風にして、
> その文字列がない間だけ、待機、というふうにはできないでしょうか?
>
>
>
> > 困ってます君のメッセージ(#7)への返事
> >
> > スキャン中というのは、すでにページが遷移したあとで、
> > 同じページ内にリンクが出てくる、という認識で合ってますでしょうか?
> >
> > スキャン中、READYSTATEが使えないのであれば、
> > APIのSLEEPで任意の秒数待機したあとで、
> > <a>タグを探す、というのはどうでしょう?
> >
> > > 待機ができないのは、
> > > ウイルススキャン中は、
> > > READYSTATEは4になっていました。
> > > もしリンクがなければ、待機しつづける、
> > > というコードにすればいいのでしょうか?
> > >
> > > Debug.Print objIE2.ReadyState
> > > Debug.Print objIE2.Busy
> > >
> > > 4
> > > False
> > >
> > >
> > > > このようにしたら遷移したドキュメントのURLを取得できました。
> > > >
> > > > Dim objShell, objIE2 As Object
> > > > Set objShell = CreateObject("Shell.Application")
> > > > Set objIE2 = objShell.Windows(objShell.Windows.Count - 1)
> > > >
> > > > ソースはここでした。
> > > > https://teratail.com/questions/9052
> > > >
> > > > > みらーのメッセージ(#4)への返事
> > > > >
> > > > > ありがとうございます。
> > > > >
> > > > > ページが遷移しても、
> > > > > 最初のie.documentのオブジェクトは変更していないので、
> > > > > ie.document.urlは前のアドレスのままで、
> > > > > リンクがなくエラーとなってしまいます。
> > > > >
> > > > > 遷移した、今開いている新しいページを
> > > > > ie.documentにする方法はありますか?
> > > > >
> > > > > 新しいオブジェクトを作成しなおしすればいいでしょうか?
> > > > >
> > > > > > 困ってます君のメッセージ(#3)への返事
> > > > > >
> > > > > > ページ上にリンクが出てくるのであれば、
> > > > > > ページが遷移したあとに、innertextが"http*"で始まる<a>タグをループで探せば大丈夫ではないでしょうか。
> > > > > >
> > > > > > For Each obj In IE.document.getElementsByTagName("a")
> > > > > >   If obj.innertext Like "http*" Then
> > > > > >     obj.Click
> > > > > >   End If
> > > > > > Next obj
> > > > > >
> > > > > > > みらーのメッセージ(#2)への返事
> > > > > > >
> > > > > > > ありがとうございます!!
> > > > > > >
> > > > > > > リンクは、サイト上のページにでてきます。
> > > > > > > サイトのURLが変更になり、ループで待機ができない感じです。
> > > > > > >
> > > > > > > このようなページに変更します。
> > > > > > >
> > > > > > > https://kc.mcafee.com/corporate/index?page=content&id=KB80729&viewlocale=ja_JP&locale=de_DE
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > > 困ってます君のメッセージ(#1)への返事
> > > > > > > >
> > > > > > > > リンクというのは、サイト上に出てくるのでしょうか?
> > > > > > > > それともダイアログでしょうか?
> > > > > > > >
> > > > > > > > 「1分経ったらクリック」する場合、
> > > > > > > > 仮にスキャンに1分以上かかった場合はアウトですよね。
> > > > > > > >
> > > > > > > > そのリンクが出てくるまで、ループで待機するのがベストだと思います。
> > > > > > > > それとsendkeysも確実性がないので、使うのはオススメしません。
> > > > > > > >
> > > > > > > >
> > > > > > > > > VBAでファイルの保存ボタンをおし、
> > > > > > > > > application.sendkeysで保存、まではできたのですが、
> > > > > > > > >
> > > > > > > > > うちの会社ではウイルスチェックのソフトを使っており、
> > > > > > > > > (McAfee web gateway)
> > > > > > > > > 一度、ある特定の場所に、ファイルが保存されて、
> > > > > > > > > そこでウイルススキャンが行われ、
> > > > > > > > > 問題なければ、
> > > > > > > > > 画面がかわり、ダウンロードのリンクが表示され、
> > > > > > > > > そこをもう一度、クリックしたら、
> > > > > > > > > やっとダウンロードできます。
> > > > > > > > >
> > > > > > > > > 問題は、ウイルススキャンの時間が、
> > > > > > > > > ファイルのサイズによって違い、
> > > > > > > > > 画面が変更する時間も長かったりするので、
> > > > > > > > > エラーになってしまいます。
> > > > > > > > >
> > > > > > > > > このような場合は、
> > > > > > > > > 例えばどのような場合でも1分停止してから
> > > > > > > > > リンクをクリック、
> > > > > > > > > というような方法しかないでしょうか?
> > > > > > > > >
> > > > > > > > > 同じような経験された方がいらっしゃいましたら
> > > > > > > > > 教えて頂けると幸いです。

Message#11 2017年6月6日(火)16時00分
From: 困ってます君
返事 削除 変更
みらーさん

ありがとうございました。

できました。

このようにしたらリンクができるまで待機できました。
While Left(objIE.Document.getElementsByTagName("td")(2).innerText, 7) = "ダウンロード中"
DoEvents
Wend

またおっしゃるとおり、
APPLICATION.WAITを使ったら、
ieオブジェクトはそのままで大丈夫でした。

本当にありがとうございました!

> みらーのメッセージ(#9)への返事
>
> ありがとうございます。
>
> すでにページが遷移した後で、
> (readystateはすでに4になっている)
> 画面が30%完了、50&完了、100パーセント完了というふうに表示されていき、
> 完了したら、ダウンロードのリンクが現れます。
>
> DOCUMENTでもREADYSTATEやってみましたが、
> COMPLETEで、だめでした。
>
> ファイルの大きさによって、100%完了になる時間がちがうのですが、
> 最大3分待つようにすればいいかもしれません。
>
> また、100パーセント完了になったら、
> CLICK HERE という文字列が現れるので、
>
> While Not InStr(objie2.Document.getElementsByClassName("datatable").innerText, "Click") > 0
> DoEvents
> Wend
>
> という風にして、
> その文字列がない間だけ、待機、というふうにはできないでしょうか?
>
>
>
> > 困ってます君のメッセージ(#7)への返事
> >
> > スキャン中というのは、すでにページが遷移したあとで、
> > 同じページ内にリンクが出てくる、という認識で合ってますでしょうか?
> >
> > スキャン中、READYSTATEが使えないのであれば、
> > APIのSLEEPで任意の秒数待機したあとで、
> > <a>タグを探す、というのはどうでしょう?
> >
> > > 待機ができないのは、
> > > ウイルススキャン中は、
> > > READYSTATEは4になっていました。
> > > もしリンクがなければ、待機しつづける、
> > > というコードにすればいいのでしょうか?
> > >
> > > Debug.Print objIE2.ReadyState
> > > Debug.Print objIE2.Busy
> > >
> > > 4
> > > False
> > >
> > >
> > > > このようにしたら遷移したドキュメントのURLを取得できました。
> > > >
> > > > Dim objShell, objIE2 As Object
> > > > Set objShell = CreateObject("Shell.Application")
> > > > Set objIE2 = objShell.Windows(objShell.Windows.Count - 1)
> > > >
> > > > ソースはここでした。
> > > > https://teratail.com/questions/9052
> > > >
> > > > > みらーのメッセージ(#4)への返事
> > > > >
> > > > > ありがとうございます。
> > > > >
> > > > > ページが遷移しても、
> > > > > 最初のie.documentのオブジェクトは変更していないので、
> > > > > ie.document.urlは前のアドレスのままで、
> > > > > リンクがなくエラーとなってしまいます。
> > > > >
> > > > > 遷移した、今開いている新しいページを
> > > > > ie.documentにする方法はありますか?
> > > > >
> > > > > 新しいオブジェクトを作成しなおしすればいいでしょうか?
> > > > >
> > > > > > 困ってます君のメッセージ(#3)への返事
> > > > > >
> > > > > > ページ上にリンクが出てくるのであれば、
> > > > > > ページが遷移したあとに、innertextが"http*"で始まる<a>タグをループで探せば大丈夫ではないでしょうか。
> > > > > >
> > > > > > For Each obj In IE.document.getElementsByTagName("a")
> > > > > >   If obj.innertext Like "http*" Then
> > > > > >     obj.Click
> > > > > >   End If
> > > > > > Next obj
> > > > > >
> > > > > > > みらーのメッセージ(#2)への返事
> > > > > > >
> > > > > > > ありがとうございます!!
> > > > > > >
> > > > > > > リンクは、サイト上のページにでてきます。
> > > > > > > サイトのURLが変更になり、ループで待機ができない感じです。
> > > > > > >
> > > > > > > このようなページに変更します。
> > > > > > >
> > > > > > > https://kc.mcafee.com/corporate/index?page=content&id=KB80729&viewlocale=ja_JP&locale=de_DE
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > > 困ってます君のメッセージ(#1)への返事
> > > > > > > >
> > > > > > > > リンクというのは、サイト上に出てくるのでしょうか?
> > > > > > > > それともダイアログでしょうか?
> > > > > > > >
> > > > > > > > 「1分経ったらクリック」する場合、
> > > > > > > > 仮にスキャンに1分以上かかった場合はアウトですよね。
> > > > > > > >
> > > > > > > > そのリンクが出てくるまで、ループで待機するのがベストだと思います。
> > > > > > > > それとsendkeysも確実性がないので、使うのはオススメしません。
> > > > > > > >
> > > > > > > >
> > > > > > > > > VBAでファイルの保存ボタンをおし、
> > > > > > > > > application.sendkeysで保存、まではできたのですが、
> > > > > > > > >
> > > > > > > > > うちの会社ではウイルスチェックのソフトを使っており、
> > > > > > > > > (McAfee web gateway)
> > > > > > > > > 一度、ある特定の場所に、ファイルが保存されて、
> > > > > > > > > そこでウイルススキャンが行われ、
> > > > > > > > > 問題なければ、
> > > > > > > > > 画面がかわり、ダウンロードのリンクが表示され、
> > > > > > > > > そこをもう一度、クリックしたら、
> > > > > > > > > やっとダウンロードできます。
> > > > > > > > >
> > > > > > > > > 問題は、ウイルススキャンの時間が、
> > > > > > > > > ファイルのサイズによって違い、
> > > > > > > > > 画面が変更する時間も長かったりするので、
> > > > > > > > > エラーになってしまいます。
> > > > > > > > >
> > > > > > > > > このような場合は、
> > > > > > > > > 例えばどのような場合でも1分停止してから
> > > > > > > > > リンクをクリック、
> > > > > > > > > というような方法しかないでしょうか?
> > > > > > > > >
> > > > > > > > > 同じような経験された方がいらっしゃいましたら
> > > > > > > > > 教えて頂けると幸いです。

Message#10 2017年6月5日(月)19時52分
From: 困ってます君
返事 削除 変更
みらーのメッセージ(#9)への返事

ありがとうございます。

すでにページが遷移した後で、
(readystateはすでに4になっている)
画面が30%完了、50&完了、100パーセント完了というふうに表示されていき、
完了したら、ダウンロードのリンクが現れます。

DOCUMENTでもREADYSTATEやってみましたが、
COMPLETEで、だめでした。

ファイルの大きさによって、100%完了になる時間がちがうのですが、
最大3分待つようにすればいいかもしれません。

また、100パーセント完了になったら、
CLICK HERE という文字列が現れるので、

While Not InStr(objie2.Document.getElementsByClassName("datatable").innerText, "Click") > 0
DoEvents
Wend

という風にして、
その文字列がない間だけ、待機、というふうにはできないでしょうか?



> 困ってます君のメッセージ(#7)への返事
>
> スキャン中というのは、すでにページが遷移したあとで、
> 同じページ内にリンクが出てくる、という認識で合ってますでしょうか?
>
> スキャン中、READYSTATEが使えないのであれば、
> APIのSLEEPで任意の秒数待機したあとで、
> <a>タグを探す、というのはどうでしょう?
>
> > 待機ができないのは、
> > ウイルススキャン中は、
> > READYSTATEは4になっていました。
> > もしリンクがなければ、待機しつづける、
> > というコードにすればいいのでしょうか?
> >
> > Debug.Print objIE2.ReadyState
> > Debug.Print objIE2.Busy
> >
> > 4
> > False
> >
> >
> > > このようにしたら遷移したドキュメントのURLを取得できました。
> > >
> > > Dim objShell, objIE2 As Object
> > > Set objShell = CreateObject("Shell.Application")
> > > Set objIE2 = objShell.Windows(objShell.Windows.Count - 1)
> > >
> > > ソースはここでした。
> > > https://teratail.com/questions/9052
> > >
> > > > みらーのメッセージ(#4)への返事
> > > >
> > > > ありがとうございます。
> > > >
> > > > ページが遷移しても、
> > > > 最初のie.documentのオブジェクトは変更していないので、
> > > > ie.document.urlは前のアドレスのままで、
> > > > リンクがなくエラーとなってしまいます。
> > > >
> > > > 遷移した、今開いている新しいページを
> > > > ie.documentにする方法はありますか?
> > > >
> > > > 新しいオブジェクトを作成しなおしすればいいでしょうか?
> > > >
> > > > > 困ってます君のメッセージ(#3)への返事
> > > > >
> > > > > ページ上にリンクが出てくるのであれば、
> > > > > ページが遷移したあとに、innertextが"http*"で始まる<a>タグをループで探せば大丈夫ではないでしょうか。
> > > > >
> > > > > For Each obj In IE.document.getElementsByTagName("a")
> > > > >   If obj.innertext Like "http*" Then
> > > > >     obj.Click
> > > > >   End If
> > > > > Next obj
> > > > >
> > > > > > みらーのメッセージ(#2)への返事
> > > > > >
> > > > > > ありがとうございます!!
> > > > > >
> > > > > > リンクは、サイト上のページにでてきます。
> > > > > > サイトのURLが変更になり、ループで待機ができない感じです。
> > > > > >
> > > > > > このようなページに変更します。
> > > > > >
> > > > > > https://kc.mcafee.com/corporate/index?page=content&id=KB80729&viewlocale=ja_JP&locale=de_DE
> > > > > >
> > > > > >
> > > > > >
> > > > > > > 困ってます君のメッセージ(#1)への返事
> > > > > > >
> > > > > > > リンクというのは、サイト上に出てくるのでしょうか?
> > > > > > > それともダイアログでしょうか?
> > > > > > >
> > > > > > > 「1分経ったらクリック」する場合、
> > > > > > > 仮にスキャンに1分以上かかった場合はアウトですよね。
> > > > > > >
> > > > > > > そのリンクが出てくるまで、ループで待機するのがベストだと思います。
> > > > > > > それとsendkeysも確実性がないので、使うのはオススメしません。
> > > > > > >
> > > > > > >
> > > > > > > > VBAでファイルの保存ボタンをおし、
> > > > > > > > application.sendkeysで保存、まではできたのですが、
> > > > > > > >
> > > > > > > > うちの会社ではウイルスチェックのソフトを使っており、
> > > > > > > > (McAfee web gateway)
> > > > > > > > 一度、ある特定の場所に、ファイルが保存されて、
> > > > > > > > そこでウイルススキャンが行われ、
> > > > > > > > 問題なければ、
> > > > > > > > 画面がかわり、ダウンロードのリンクが表示され、
> > > > > > > > そこをもう一度、クリックしたら、
> > > > > > > > やっとダウンロードできます。
> > > > > > > >
> > > > > > > > 問題は、ウイルススキャンの時間が、
> > > > > > > > ファイルのサイズによって違い、
> > > > > > > > 画面が変更する時間も長かったりするので、
> > > > > > > > エラーになってしまいます。
> > > > > > > >
> > > > > > > > このような場合は、
> > > > > > > > 例えばどのような場合でも1分停止してから
> > > > > > > > リンクをクリック、
> > > > > > > > というような方法しかないでしょうか?
> > > > > > > >
> > > > > > > > 同じような経験された方がいらっしゃいましたら
> > > > > > > > 教えて頂けると幸いです。

Message#9 2017年6月5日(月)17時46分
From: みらー
返事 削除 変更
困ってます君のメッセージ(#7)への返事

スキャン中というのは、すでにページが遷移したあとで、
同じページ内にリンクが出てくる、という認識で合ってますでしょうか?

スキャン中、READYSTATEが使えないのであれば、
APIのSLEEPで任意の秒数待機したあとで、
<a>タグを探す、というのはどうでしょう?

> 待機ができないのは、
> ウイルススキャン中は、
> READYSTATEは4になっていました。
> もしリンクがなければ、待機しつづける、
> というコードにすればいいのでしょうか?
>
> Debug.Print objIE2.ReadyState
> Debug.Print objIE2.Busy
>
> 4
> False
>
>
> > このようにしたら遷移したドキュメントのURLを取得できました。
> >
> > Dim objShell, objIE2 As Object
> > Set objShell = CreateObject("Shell.Application")
> > Set objIE2 = objShell.Windows(objShell.Windows.Count - 1)
> >
> > ソースはここでした。
> > https://teratail.com/questions/9052
> >
> > > みらーのメッセージ(#4)への返事
> > >
> > > ありがとうございます。
> > >
> > > ページが遷移しても、
> > > 最初のie.documentのオブジェクトは変更していないので、
> > > ie.document.urlは前のアドレスのままで、
> > > リンクがなくエラーとなってしまいます。
> > >
> > > 遷移した、今開いている新しいページを
> > > ie.documentにする方法はありますか?
> > >
> > > 新しいオブジェクトを作成しなおしすればいいでしょうか?
> > >
> > > > 困ってます君のメッセージ(#3)への返事
> > > >
> > > > ページ上にリンクが出てくるのであれば、
> > > > ページが遷移したあとに、innertextが"http*"で始まる<a>タグをループで探せば大丈夫ではないでしょうか。
> > > >
> > > > For Each obj In IE.document.getElementsByTagName("a")
> > > >   If obj.innertext Like "http*" Then
> > > >     obj.Click
> > > >   End If
> > > > Next obj
> > > >
> > > > > みらーのメッセージ(#2)への返事
> > > > >
> > > > > ありがとうございます!!
> > > > >
> > > > > リンクは、サイト上のページにでてきます。
> > > > > サイトのURLが変更になり、ループで待機ができない感じです。
> > > > >
> > > > > このようなページに変更します。
> > > > >
> > > > > https://kc.mcafee.com/corporate/index?page=content&id=KB80729&viewlocale=ja_JP&locale=de_DE
> > > > >
> > > > >
> > > > >
> > > > > > 困ってます君のメッセージ(#1)への返事
> > > > > >
> > > > > > リンクというのは、サイト上に出てくるのでしょうか?
> > > > > > それともダイアログでしょうか?
> > > > > >
> > > > > > 「1分経ったらクリック」する場合、
> > > > > > 仮にスキャンに1分以上かかった場合はアウトですよね。
> > > > > >
> > > > > > そのリンクが出てくるまで、ループで待機するのがベストだと思います。
> > > > > > それとsendkeysも確実性がないので、使うのはオススメしません。
> > > > > >
> > > > > >
> > > > > > > VBAでファイルの保存ボタンをおし、
> > > > > > > application.sendkeysで保存、まではできたのですが、
> > > > > > >
> > > > > > > うちの会社ではウイルスチェックのソフトを使っており、
> > > > > > > (McAfee web gateway)
> > > > > > > 一度、ある特定の場所に、ファイルが保存されて、
> > > > > > > そこでウイルススキャンが行われ、
> > > > > > > 問題なければ、
> > > > > > > 画面がかわり、ダウンロードのリンクが表示され、
> > > > > > > そこをもう一度、クリックしたら、
> > > > > > > やっとダウンロードできます。
> > > > > > >
> > > > > > > 問題は、ウイルススキャンの時間が、
> > > > > > > ファイルのサイズによって違い、
> > > > > > > 画面が変更する時間も長かったりするので、
> > > > > > > エラーになってしまいます。
> > > > > > >
> > > > > > > このような場合は、
> > > > > > > 例えばどのような場合でも1分停止してから
> > > > > > > リンクをクリック、
> > > > > > > というような方法しかないでしょうか?
> > > > > > >
> > > > > > > 同じような経験された方がいらっしゃいましたら
> > > > > > > 教えて頂けると幸いです。

Message#8 2017年6月5日(月)17時32分
From: みらー
返事 削除 変更
困ってます君のメッセージ(#6)への返事

通常は、ページ(URL)が遷移したら、
documentは遷移先のものになるはずですが…。
以下は簡単なサンプルです。

Sub test()
  Set objIE = CreateObject("InternetExplorer.Application")
  objIE.Visible = True

  objIE.navigate "http://〇〇〇"

  '最初のページ
  For Each objtag In objIE.document.getElementsByTagName("a")
    If objtag.innertext Like "http*" Then
      objtag.Click 'リンクをクリック
      Exit For
    End If
  Next objtag

  '遷移待機
  While objIE.readyState <> 4 Or objIE.Busy = True
    DoEvents
  Wend

  '遷移後のページ
  For Each objtag In objIE.document.getElementsByTagName("a")
    If objtag.innertext Like "http*" Then
      objtag.Click 'リンクをクリック
      Exit For
    End If
  Next objtag
End Sub

最初のページと遷移後ページで同じ処理をしていますが、
objIE.documentはページ遷移した時点で入れ替わってるので、
objIEを毎度用意する必要はありません。

「リンクがなくエラーになる」のは、
ページ遷移が完了する前に、documentを探すコードが走ったりしていませんか?



> このようにしたら遷移したドキュメントのURLを取得できました。
>
> Dim objShell, objIE2 As Object
> Set objShell = CreateObject("Shell.Application")
> Set objIE2 = objShell.Windows(objShell.Windows.Count - 1)
>
> ソースはここでした。
> https://teratail.com/questions/9052
>
> > みらーのメッセージ(#4)への返事
> >
> > ありがとうございます。
> >
> > ページが遷移しても、
> > 最初のie.documentのオブジェクトは変更していないので、
> > ie.document.urlは前のアドレスのままで、
> > リンクがなくエラーとなってしまいます。
> >
> > 遷移した、今開いている新しいページを
> > ie.documentにする方法はありますか?
> >
> > 新しいオブジェクトを作成しなおしすればいいでしょうか?

Message#7 2017年6月5日(月)17時08分
From: 困ってます君
返事 削除 変更
待機ができないのは、
ウイルススキャン中は、
READYSTATEは4になっていました。
もしリンクがなければ、待機しつづける、
というコードにすればいいのでしょうか?

Debug.Print objIE2.ReadyState
Debug.Print objIE2.Busy

4
False


> このようにしたら遷移したドキュメントのURLを取得できました。
>
> Dim objShell, objIE2 As Object
> Set objShell = CreateObject("Shell.Application")
> Set objIE2 = objShell.Windows(objShell.Windows.Count - 1)
>
> ソースはここでした。
> https://teratail.com/questions/9052
>
> > みらーのメッセージ(#4)への返事
> >
> > ありがとうございます。
> >
> > ページが遷移しても、
> > 最初のie.documentのオブジェクトは変更していないので、
> > ie.document.urlは前のアドレスのままで、
> > リンクがなくエラーとなってしまいます。
> >
> > 遷移した、今開いている新しいページを
> > ie.documentにする方法はありますか?
> >
> > 新しいオブジェクトを作成しなおしすればいいでしょうか?
> >
> > > 困ってます君のメッセージ(#3)への返事
> > >
> > > ページ上にリンクが出てくるのであれば、
> > > ページが遷移したあとに、innertextが"http*"で始まる<a>タグをループで探せば大丈夫ではないでしょうか。
> > >
> > > For Each obj In IE.document.getElementsByTagName("a")
> > >   If obj.innertext Like "http*" Then
> > >     obj.Click
> > >   End If
> > > Next obj
> > >
> > > > みらーのメッセージ(#2)への返事
> > > >
> > > > ありがとうございます!!
> > > >
> > > > リンクは、サイト上のページにでてきます。
> > > > サイトのURLが変更になり、ループで待機ができない感じです。
> > > >
> > > > このようなページに変更します。
> > > >
> > > > https://kc.mcafee.com/corporate/index?page=content&id=KB80729&viewlocale=ja_JP&locale=de_DE
> > > >
> > > >
> > > >
> > > > > 困ってます君のメッセージ(#1)への返事
> > > > >
> > > > > リンクというのは、サイト上に出てくるのでしょうか?
> > > > > それともダイアログでしょうか?
> > > > >
> > > > > 「1分経ったらクリック」する場合、
> > > > > 仮にスキャンに1分以上かかった場合はアウトですよね。
> > > > >
> > > > > そのリンクが出てくるまで、ループで待機するのがベストだと思います。
> > > > > それとsendkeysも確実性がないので、使うのはオススメしません。
> > > > >
> > > > >
> > > > > > VBAでファイルの保存ボタンをおし、
> > > > > > application.sendkeysで保存、まではできたのですが、
> > > > > >
> > > > > > うちの会社ではウイルスチェックのソフトを使っており、
> > > > > > (McAfee web gateway)
> > > > > > 一度、ある特定の場所に、ファイルが保存されて、
> > > > > > そこでウイルススキャンが行われ、
> > > > > > 問題なければ、
> > > > > > 画面がかわり、ダウンロードのリンクが表示され、
> > > > > > そこをもう一度、クリックしたら、
> > > > > > やっとダウンロードできます。
> > > > > >
> > > > > > 問題は、ウイルススキャンの時間が、
> > > > > > ファイルのサイズによって違い、
> > > > > > 画面が変更する時間も長かったりするので、
> > > > > > エラーになってしまいます。
> > > > > >
> > > > > > このような場合は、
> > > > > > 例えばどのような場合でも1分停止してから
> > > > > > リンクをクリック、
> > > > > > というような方法しかないでしょうか?
> > > > > >
> > > > > > 同じような経験された方がいらっしゃいましたら
> > > > > > 教えて頂けると幸いです。

Message#6 2017年6月5日(月)16時36分
From: 困ってます君
返事 削除 変更
このようにしたら遷移したドキュメントのURLを取得できました。

Dim objShell, objIE2 As Object
Set objShell = CreateObject("Shell.Application")
Set objIE2 = objShell.Windows(objShell.Windows.Count - 1)

ソースはここでした。
https://teratail.com/questions/9052

> みらーのメッセージ(#4)への返事
>
> ありがとうございます。
>
> ページが遷移しても、
> 最初のie.documentのオブジェクトは変更していないので、
> ie.document.urlは前のアドレスのままで、
> リンクがなくエラーとなってしまいます。
>
> 遷移した、今開いている新しいページを
> ie.documentにする方法はありますか?
>
> 新しいオブジェクトを作成しなおしすればいいでしょうか?
>
> > 困ってます君のメッセージ(#3)への返事
> >
> > ページ上にリンクが出てくるのであれば、
> > ページが遷移したあとに、innertextが"http*"で始まる<a>タグをループで探せば大丈夫ではないでしょうか。
> >
> > For Each obj In IE.document.getElementsByTagName("a")
> >   If obj.innertext Like "http*" Then
> >     obj.Click
> >   End If
> > Next obj
> >
> > > みらーのメッセージ(#2)への返事
> > >
> > > ありがとうございます!!
> > >
> > > リンクは、サイト上のページにでてきます。
> > > サイトのURLが変更になり、ループで待機ができない感じです。
> > >
> > > このようなページに変更します。
> > >
> > > https://kc.mcafee.com/corporate/index?page=content&id=KB80729&viewlocale=ja_JP&locale=de_DE
> > >
> > >
> > >
> > > > 困ってます君のメッセージ(#1)への返事
> > > >
> > > > リンクというのは、サイト上に出てくるのでしょうか?
> > > > それともダイアログでしょうか?
> > > >
> > > > 「1分経ったらクリック」する場合、
> > > > 仮にスキャンに1分以上かかった場合はアウトですよね。
> > > >
> > > > そのリンクが出てくるまで、ループで待機するのがベストだと思います。
> > > > それとsendkeysも確実性がないので、使うのはオススメしません。
> > > >
> > > >
> > > > > VBAでファイルの保存ボタンをおし、
> > > > > application.sendkeysで保存、まではできたのですが、
> > > > >
> > > > > うちの会社ではウイルスチェックのソフトを使っており、
> > > > > (McAfee web gateway)
> > > > > 一度、ある特定の場所に、ファイルが保存されて、
> > > > > そこでウイルススキャンが行われ、
> > > > > 問題なければ、
> > > > > 画面がかわり、ダウンロードのリンクが表示され、
> > > > > そこをもう一度、クリックしたら、
> > > > > やっとダウンロードできます。
> > > > >
> > > > > 問題は、ウイルススキャンの時間が、
> > > > > ファイルのサイズによって違い、
> > > > > 画面が変更する時間も長かったりするので、
> > > > > エラーになってしまいます。
> > > > >
> > > > > このような場合は、
> > > > > 例えばどのような場合でも1分停止してから
> > > > > リンクをクリック、
> > > > > というような方法しかないでしょうか?
> > > > >
> > > > > 同じような経験された方がいらっしゃいましたら
> > > > > 教えて頂けると幸いです。

Message#5 2017年6月5日(月)12時20分
From: こまってます君
返事 削除 変更
みらーのメッセージ(#4)への返事

ありがとうございます。

ページが遷移しても、
最初のie.documentのオブジェクトは変更していないので、
ie.document.urlは前のアドレスのままで、
リンクがなくエラーとなってしまいます。

遷移した、今開いている新しいページを
ie.documentにする方法はありますか?

新しいオブジェクトを作成しなおしすればいいでしょうか?

> 困ってます君のメッセージ(#3)への返事
>
> ページ上にリンクが出てくるのであれば、
> ページが遷移したあとに、innertextが"http*"で始まる<a>タグをループで探せば大丈夫ではないでしょうか。
>
> For Each obj In IE.document.getElementsByTagName("a")
>   If obj.innertext Like "http*" Then
>     obj.Click
>   End If
> Next obj
>
> > みらーのメッセージ(#2)への返事
> >
> > ありがとうございます!!
> >
> > リンクは、サイト上のページにでてきます。
> > サイトのURLが変更になり、ループで待機ができない感じです。
> >
> > このようなページに変更します。
> >
> > https://kc.mcafee.com/corporate/index?page=content&id=KB80729&viewlocale=ja_JP&locale=de_DE
> >
> >
> >
> > > 困ってます君のメッセージ(#1)への返事
> > >
> > > リンクというのは、サイト上に出てくるのでしょうか?
> > > それともダイアログでしょうか?
> > >
> > > 「1分経ったらクリック」する場合、
> > > 仮にスキャンに1分以上かかった場合はアウトですよね。
> > >
> > > そのリンクが出てくるまで、ループで待機するのがベストだと思います。
> > > それとsendkeysも確実性がないので、使うのはオススメしません。
> > >
> > >
> > > > VBAでファイルの保存ボタンをおし、
> > > > application.sendkeysで保存、まではできたのですが、
> > > >
> > > > うちの会社ではウイルスチェックのソフトを使っており、
> > > > (McAfee web gateway)
> > > > 一度、ある特定の場所に、ファイルが保存されて、
> > > > そこでウイルススキャンが行われ、
> > > > 問題なければ、
> > > > 画面がかわり、ダウンロードのリンクが表示され、
> > > > そこをもう一度、クリックしたら、
> > > > やっとダウンロードできます。
> > > >
> > > > 問題は、ウイルススキャンの時間が、
> > > > ファイルのサイズによって違い、
> > > > 画面が変更する時間も長かったりするので、
> > > > エラーになってしまいます。
> > > >
> > > > このような場合は、
> > > > 例えばどのような場合でも1分停止してから
> > > > リンクをクリック、
> > > > というような方法しかないでしょうか?
> > > >
> > > > 同じような経験された方がいらっしゃいましたら
> > > > 教えて頂けると幸いです。

Message#4 2017年6月5日(月)09時19分
From: みらー
返事 削除 変更
困ってます君のメッセージ(#3)への返事

ページ上にリンクが出てくるのであれば、
ページが遷移したあとに、innertextが"http*"で始まる<a>タグをループで探せば大丈夫ではないでしょうか。

For Each obj In IE.document.getElementsByTagName("a")
  If obj.innertext Like "http*" Then
    obj.Click
  End If
Next obj

> みらーのメッセージ(#2)への返事
>
> ありがとうございます!!
>
> リンクは、サイト上のページにでてきます。
> サイトのURLが変更になり、ループで待機ができない感じです。
>
> このようなページに変更します。
>
> https://kc.mcafee.com/corporate/index?page=content&id=KB80729&viewlocale=ja_JP&locale=de_DE
>
>
>
> > 困ってます君のメッセージ(#1)への返事
> >
> > リンクというのは、サイト上に出てくるのでしょうか?
> > それともダイアログでしょうか?
> >
> > 「1分経ったらクリック」する場合、
> > 仮にスキャンに1分以上かかった場合はアウトですよね。
> >
> > そのリンクが出てくるまで、ループで待機するのがベストだと思います。
> > それとsendkeysも確実性がないので、使うのはオススメしません。
> >
> >
> > > VBAでファイルの保存ボタンをおし、
> > > application.sendkeysで保存、まではできたのですが、
> > >
> > > うちの会社ではウイルスチェックのソフトを使っており、
> > > (McAfee web gateway)
> > > 一度、ある特定の場所に、ファイルが保存されて、
> > > そこでウイルススキャンが行われ、
> > > 問題なければ、
> > > 画面がかわり、ダウンロードのリンクが表示され、
> > > そこをもう一度、クリックしたら、
> > > やっとダウンロードできます。
> > >
> > > 問題は、ウイルススキャンの時間が、
> > > ファイルのサイズによって違い、
> > > 画面が変更する時間も長かったりするので、
> > > エラーになってしまいます。
> > >
> > > このような場合は、
> > > 例えばどのような場合でも1分停止してから
> > > リンクをクリック、
> > > というような方法しかないでしょうか?
> > >
> > > 同じような経験された方がいらっしゃいましたら
> > > 教えて頂けると幸いです。

Message#3 2017年6月4日(日)17時26分
From: 困ってます君
返事 削除 変更
みらーのメッセージ(#2)への返事

ありがとうございます!!

リンクは、サイト上のページにでてきます。
サイトのURLが変更になり、ループで待機ができない感じです。

このようなページに変更します。

https://kc.mcafee.com/corporate/index?page=content&id=KB80729&viewlocale=ja_JP&locale=de_DE



> 困ってます君のメッセージ(#1)への返事
>
> リンクというのは、サイト上に出てくるのでしょうか?
> それともダイアログでしょうか?
>
> 「1分経ったらクリック」する場合、
> 仮にスキャンに1分以上かかった場合はアウトですよね。
>
> そのリンクが出てくるまで、ループで待機するのがベストだと思います。
> それとsendkeysも確実性がないので、使うのはオススメしません。
>
>
> > VBAでファイルの保存ボタンをおし、
> > application.sendkeysで保存、まではできたのですが、
> >
> > うちの会社ではウイルスチェックのソフトを使っており、
> > (McAfee web gateway)
> > 一度、ある特定の場所に、ファイルが保存されて、
> > そこでウイルススキャンが行われ、
> > 問題なければ、
> > 画面がかわり、ダウンロードのリンクが表示され、
> > そこをもう一度、クリックしたら、
> > やっとダウンロードできます。
> >
> > 問題は、ウイルススキャンの時間が、
> > ファイルのサイズによって違い、
> > 画面が変更する時間も長かったりするので、
> > エラーになってしまいます。
> >
> > このような場合は、
> > 例えばどのような場合でも1分停止してから
> > リンクをクリック、
> > というような方法しかないでしょうか?
> >
> > 同じような経験された方がいらっしゃいましたら
> > 教えて頂けると幸いです。

Message#2 2017年6月3日(土)20時31分
From: みらー
返事 削除 変更
困ってます君のメッセージ(#1)への返事

リンクというのは、サイト上に出てくるのでしょうか?
それともダイアログでしょうか?

「1分経ったらクリック」する場合、
仮にスキャンに1分以上かかった場合はアウトですよね。

そのリンクが出てくるまで、ループで待機するのがベストだと思います。
それとsendkeysも確実性がないので、使うのはオススメしません。


> VBAでファイルの保存ボタンをおし、
> application.sendkeysで保存、まではできたのですが、
>
> うちの会社ではウイルスチェックのソフトを使っており、
> (McAfee web gateway)
> 一度、ある特定の場所に、ファイルが保存されて、
> そこでウイルススキャンが行われ、
> 問題なければ、
> 画面がかわり、ダウンロードのリンクが表示され、
> そこをもう一度、クリックしたら、
> やっとダウンロードできます。
>
> 問題は、ウイルススキャンの時間が、
> ファイルのサイズによって違い、
> 画面が変更する時間も長かったりするので、
> エラーになってしまいます。
>
> このような場合は、
> 例えばどのような場合でも1分停止してから
> リンクをクリック、
> というような方法しかないでしょうか?
>
> 同じような経験された方がいらっしゃいましたら
> 教えて頂けると幸いです。

Message#1 2017年6月2日(金)18時49分
From: 困ってます君
返事 削除 変更
VBAでファイルの保存ボタンをおし、
application.sendkeysで保存、まではできたのですが、

うちの会社ではウイルスチェックのソフトを使っており、
(McAfee web gateway)
一度、ある特定の場所に、ファイルが保存されて、
そこでウイルススキャンが行われ、
問題なければ、
画面がかわり、ダウンロードのリンクが表示され、
そこをもう一度、クリックしたら、
やっとダウンロードできます。

問題は、ウイルススキャンの時間が、
ファイルのサイズによって違い、
画面が変更する時間も長かったりするので、
エラーになってしまいます。

このような場合は、
例えばどのような場合でも1分停止してから
リンクをクリック、
というような方法しかないでしょうか?

同じような経験された方がいらっしゃいましたら
教えて頂けると幸いです。

最新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