[過去ログ] VBAなんでも質問スレ Part2 [転載禁止]©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
755: 2019/03/22(金)22:15 ID:CAtaruvO(1) AAS
>>752
VBAはシングルスレッドだが、IEでの読み込みは同時並行的にやってくれるんじゃねえの?
756: 2019/03/22(金)22:38 ID:DJ7JSKt5(4/4) AAS
>>750
?
>>751
その具体的な方法をコードで例示する形で教えていただきたいのでござるよ。
いまだと
Do While readyState < 4
Do Events
Loop
の待ちを50個のURLで1つ1つ順番にやってて
1つのURLを読んでデータ取って閉じる、というのをやるのが社内ネットワークが遅いため(データベースからの読み込みも含まれるからの)1つあたり1分近くかかってる。
だから異常に時間がかかる。
一気に全部同時にやれないかなと。
757: 2019/03/22(金)22:40 ID:tgov+uRX(1) AAS
そんなもんそれこそ流行りのRPAでやればいいのでは
758: 2019/03/22(金)22:40 ID:HaipTOms(6/7) AAS
できるっていうくせにコードは出てこないのね
759: 2019/03/22(金)22:57 ID:HaipTOms(7/7) AAS
そもそも回線が細いのはプログラムでどうこうできないから上司を説得して諦めてもらうしかない
760: 2019/03/23(土)01:14 ID:BU4e6Kdq(1) AAS
趣味でやってるんじゃなかったら
適当なダウンロードソフト使ったほうが良いんじゃない
761(3): 2019/03/23(土)12:00 ID:36Js1rz1(1) AA×

762: 2019/03/23(土)15:33 ID:BqJUz3fJ(1) AAS
>>761
ありがとうございます。
試してみます。
最初のFor Nextループがものすごく時間がかかりそうで楽しみです。
あと先日は説明の簡略化のためにシンプルに書いたけど
実は開いたURL内で、ある条件があると、さらにその親URL内のAリンクの子URLも開かないといけない複雑な事情があるのです。
763: 2019/03/23(土)19:47 ID:h2FSWEPH(1) AAS
>>761
Exit For抜けてますよ
フラグも i = pg-1まで行けたときに立たせるだけで十分だと思います
あと、非表示でIEを50立ち上げると中断した時のプロセスの掃除が大変なので、Ajaxで無ければXMLHTTP60を使うのも手かもしれません。
764: 2019/03/24(日)00:51 ID:gZMjxNOF(1/2) AAS
>>752
まさかIEオブジェクトの読み込み動作がVBAのスレッドで処理されてると思ってるのか?
>>753
終わりじゃないので考慮点はある
コード書こうかと思ったけど、>>761さんが書いてるからまあいいか
読み込み完了の検出とかどうするか悩みどころではある
イベントハンドラの動的設定か、せめてWithEventsが配列にも宣言出来ればなぁ
まあ50も多重化してもオーバーヘッドかかるだけで高速化しない気がするから
数個固定で持たしてイベントハンドリングするのが現実的かもしれん
765(1): 2019/03/24(日)01:34 ID:Y3S3b5Ai(1/4) AAS
この場合Do Loopを抜ける条件が全ページの完了だから、Exit Forはあってもなくても結果というかスピードは変わらないね
さっさと抜けたところで、またForループに戻るだけだし
個人的には「pg - 1」が何回も出てくるのが美しくないなあとか、ForとDoの順番を逆にした方がコンパクトになりそうだなあとか
766(3): 2019/03/24(日)01:38 ID:Y3S3b5Ai(2/4) AAS
一括処理なら、この方がコンパクト
まあ、ホストの応答速度や、次の処理の内容次第では終わったページからどんどん片付けた方がいいだろうけど
For i = 0 To pg-1
Do
Loop Until ie(i).readyState >= 4
Next
767: 2019/03/24(日)08:29 ID:myNgr9GS(1) AAS
>>765
> 個人的には「pg - 1」が何回も出てくるのが美しくないなあとか
C言語とかに慣れてるんだろう
VBA的には
ReDim ie(1 To pg)
ReDim url(1 To pg)
For i = 1 To pg
だろうね
可能であればieとurlをTypeで纏めてそれを配列にした方が見易い
768: 2019/03/24(日)08:58 ID:Mw3X0nZC(1/3) AAS
>>766
ははは、これは笑った。確かにこれが単純明快でコンパクト w
769(2): 2019/03/24(日)10:28 ID:3PVCt58k(1/2) AAS
>>766
それだとサイズのでかいページで待ちが発生する
Do
For i
If ie(i)準備完了 And i.処理フラグFalse then
処理
処理フラグTrue
カウント
End if
Next
カウント=50 exit
Loop
770: 2019/03/24(日)10:33 ID:Mw3X0nZC(2/3) AAS
>>769
投げてからの待ちだからいいんじゃねえの?
俺はやったことないから知らんが、投げたらあとはIEが並行処理で取ってくるんだろ
で全部取ってから次の処理なら問題ない
でかいページでVBAが待っていても同時に他のページもIEが取って来てるんじゃねえの
だからでかいページで待っていてもそれが終わったら他の軽いページも取り終っていてあとは
ばたばたと進んで終了、と理解している
771: 2019/03/24(日)10:52 ID:Mw3X0nZC(3/3) AAS
>>769
ああ、すまん。それがわかってる上で待ち時間がもったいない、ということね
>>766もそこは注意書きはしているな
772: 2019/03/24(日)10:56 ID:OZ1kvGmt(1) AAS
IEはマイクロソフトも使うなって言ってるのに
VBAって不便だよね
773: 2019/03/24(日)11:58 ID:yYEn14s6(1/2) AAS
IE使えなくなったら、どうやってブラウザ制御するの?
UIAutomation面倒くさいかから、
774: 2019/03/24(日)11:58 ID:yYEn14s6(2/2) AAS
getElementByしたいんだけど。
775: 2019/03/24(日)12:34 ID:4ve/ST91(1) AAS
IE使えなくなったらってもう使ってる人なんていない
セキュリティに甘いとこは使えるのか?
776(3): 2019/03/24(日)13:28 ID:Y3S3b5Ai(3/4) AAS
ちゃんと動くのか試してみた
たしかにIEが複数開いて、平行処理でページを取ってくるね
VBAのシングルスレッドとか完全に無関係やん
777(1): 2019/03/24(日)13:33 ID:gDjNFFGJ(1/2) AAS
>>776
まだそこ?
778(1): 2019/03/24(日)13:36 ID:PYh3zpOu(1) AAS
大昔からあるファイルシステムだって非同期読み書きできる
1000倍遅いネットワークで出来ないはずがないだろうが
779: 2019/03/24(日)13:55 ID:gDjNFFGJ(2/2) AAS
>>778
無能管理職かよ
780: 2019/03/24(日)14:55 ID:gZMjxNOF(2/2) AAS
現実的には50並列で全ページ完了待ちするのはどうもなぁ
あと全力でループまわして完了待ちするのも無反応になるんじゃね
とりあえずDoEvents挟もうぜ
>>776
スレッド以前に、IEオブジェクトが別プロセスだから
アウトプロセスのCOM使うのはVBAで並列やる、おそらく安全で簡単な唯一の方法
まあCOM作る方は大変だがな
>>777
OSがサポートしてるだけで、VBAから使えるかどうかとは別の話
VBAで非同期並列やりたければ、基本的にはイベントベースでしかサポートされていない
781: 2019/03/24(日)17:00 ID:cASdygc2(1/2) AAS
>>776
これ、1つずつ待つ部分がVBAでマルチにしたいって話だったけどCreateObjectで既に別プロセスだから全部投げてから全部の完了を待つので正解なんだよな。
勘違いしてマルチプロセスでやろうとしちゃったよ。
ついでにApplication.Runで出来なくて、迷ってたんだけど、またまた勘違いでApplication.OnTimeが正解だった。
でもOnTimeって戻り値が取れないんだよな。
782: 2019/03/24(日)17:02 ID:cASdygc2(2/2) AAS
あと、ExcelVBAスレにあるようにInternetExplorer.Applicationじゃなくて別のオブジェクトの方が早いと思うよ。
783: 2019/03/24(日)17:15 ID:3PVCt58k(2/2) AAS
講釈垂れはいいからコードはよ
784: 2019/03/24(日)17:48 ID:yrUzMInJ(1) AAS
とりあえずDoEvents。
上下前次1-新書関写板覧索設栞歴
あと 218 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.025s