いまだと Do While readyState < 4 Do Events Loop の待ちを50個のURLで1つ1つ順番にやってて 1つのURLを読んでデータ取って閉じる、というのをやるのが社内ネットワークが遅いため(データベースからの読み込みも含まれるからの)1つあたり1分近くかかってる。 だから異常に時間がかかる。 一気に全部同時にやれないかなと。 0757デフォルトの名無しさん2019/03/22(金) 22:40:55.80ID:tgov+uRX そんなもんそれこそ流行りのRPAでやればいいのでは 0758デフォルトの名無しさん2019/03/22(金) 22:40:56.05ID:HaipTOms できるっていうくせにコードは出てこないのね 0759デフォルトの名無しさん2019/03/22(金) 22:57:51.11ID:HaipTOms そもそも回線が細いのはプログラムでどうこうできないから上司を説得して諦めてもらうしかない 0760デフォルトの名無しさん2019/03/23(土) 01:14:24.21ID:BU4e6Kdq 趣味でやってるんじゃなかったら 適当なダウンロードソフト使ったほうが良いんじゃない 0761デフォルトの名無しさん2019/03/23(土) 12:00:24.62ID:36Js1rz1 動くかどうか試してないけど、こんな感じでいいんじゃない? もう少し効率を上げるなら、読み込めたページからさっさと処理してもいいし
Sub test() pg = 50 ' 同時に開きたいページ数 Dim ie() As Object Dim url() As String ReDim ie(pg-1) ReDim url(pg-1) 'ここでURL設定 For i = 0 To pg-1 Set ie(i) = CreateObject("InternetExplorer.Application") ' ie(i).Visible = True '表示しない ie(i).navigate url(i) Next Do flg = True For i = 0 To pg-1 If ie(i).readyState < 4 Then flg = False End If Next Loop Until flg '全ページの読み込み待ち 'ここで読み込んだページを処理 End Sub 0762デフォルトの名無しさん2019/03/23(土) 15:33:38.79ID:BqJUz3fJ>>761 ありがとうございます。 試してみます。 最初のFor Nextループがものすごく時間がかかりそうで楽しみです。 あと先日は説明の簡略化のためにシンプルに書いたけど 実は開いたURL内で、ある条件があると、さらにその親URL内のAリンクの子URLも開かないといけない複雑な事情があるのです。 0763デフォルトの名無しさん2019/03/23(土) 19:47:18.63ID:h2FSWEPH>>761 Exit For抜けてますよ フラグも i = pg-1まで行けたときに立たせるだけで十分だと思います
個人的には「pg - 1」が何回も出てくるのが美しくないなあとか、ForとDoの順番を逆にした方がコンパクトになりそうだなあとか 0766デフォルトの名無しさん2019/03/24(日) 01:38:23.22ID:Y3S3b5Ai 一括処理なら、この方がコンパクト まあ、ホストの応答速度や、次の処理の内容次第では終わったページからどんどん片付けた方がいいだろうけど For i = 0 To pg-1 Do Loop Until ie(i).readyState >= 4 Next 0767デフォルトの名無しさん2019/03/24(日) 08:29:39.64ID:myNgr9GS>>765 > 個人的には「pg - 1」が何回も出てくるのが美しくないなあとか C言語とかに慣れてるんだろう VBA的には ReDim ie(1 To pg) ReDim url(1 To pg) For i = 1 To pg だろうね 可能であればieとurlをTypeで纏めてそれを配列にした方が見易い 0768デフォルトの名無しさん2019/03/24(日) 08:58:33.34ID:Mw3X0nZC>>766 ははは、これは笑った。確かにこれが単純明快でコンパクト w 0769デフォルトの名無しさん2019/03/24(日) 10:28:46.47ID:3PVCt58k>>766 それだとサイズのでかいページで待ちが発生する
Do For i If ie(i)準備完了 And i.処理フラグFalse then 処理 処理フラグTrue カウント End if Next カウント=50 exit Loop 0770デフォルトの名無しさん2019/03/24(日) 10:33:07.42ID:Mw3X0nZC>>769 投げてからの待ちだからいいんじゃねえの? 俺はやったことないから知らんが、投げたらあとはIEが並行処理で取ってくるんだろ で全部取ってから次の処理なら問題ない でかいページでVBAが待っていても同時に他のページもIEが取って来てるんじゃねえの だからでかいページで待っていてもそれが終わったら他の軽いページも取り終っていてあとは ばたばたと進んで終了、と理解している 0771デフォルトの名無しさん2019/03/24(日) 10:52:55.88ID:Mw3X0nZC>>769 ああ、すまん。それがわかってる上で待ち時間がもったいない、ということね >>766もそこは注意書きはしているな 0772デフォルトの名無しさん2019/03/24(日) 10:56:37.24ID:OZ1kvGmt IEはマイクロソフトも使うなって言ってるのに VBAって不便だよね 0773デフォルトの名無しさん2019/03/24(日) 11:58:25.29ID:yYEn14s6 IE使えなくなったら、どうやってブラウザ制御するの? UIAutomation面倒くさいかから、 0774デフォルトの名無しさん2019/03/24(日) 11:58:47.29ID:yYEn14s6 getElementByしたいんだけど。 0775デフォルトの名無しさん2019/03/24(日) 12:34:48.16ID:4ve/ST91 IE使えなくなったらってもう使ってる人なんていない セキュリティに甘いとこは使えるのか? 0776デフォルトの名無しさん2019/03/24(日) 13:28:35.85ID:Y3S3b5Ai ちゃんと動くのか試してみた たしかにIEが複数開いて、平行処理でページを取ってくるね VBAのシングルスレッドとか完全に無関係やん 0777デフォルトの名無しさん2019/03/24(日) 13:33:22.28ID:gDjNFFGJ>>776 まだそこ? 0778デフォルトの名無しさん2019/03/24(日) 13:36:50.26ID:PYh3zpOu 大昔からあるファイルシステムだって非同期読み書きできる 1000倍遅いネットワークで出来ないはずがないだろうが 0779デフォルトの名無しさん2019/03/24(日) 13:55:48.62ID:gDjNFFGJ>>778 無能管理職かよ 0780デフォルトの名無しさん2019/03/24(日) 14:55:03.02ID:gZMjxNOF 現実的には50並列で全ページ完了待ちするのはどうもなぁ