[過去ログ] VBAなんでも質問スレ Part2 [転載禁止]©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
743: 2019/03/22(金)19:06 ID:DJ7JSKt5(2/4) AAS
>>742
そりゃないよ、かあちゃん
744
(1): 2019/03/22(金)19:28 ID:s6oj+Xdm(1) AAS
>>741
VBAでマルチスレッドは基本的に出来ないと考えるべき。
物凄く不安定だし、Excelのオブジェクト(Rangeとか)を触った途端にExcelが消える。
で、マルチスレッドは出来ないけどマルチプロセスは出来る。

1.プログラムのブックに指定のURLのページの情報を取ってくるプロシージャを作る
2.複数のExcel.Applicationを使って、自分自身のブックを別のExcelから開くメインプロシージャを作り、その中でobjExcel.Runを使って情報を取ってくるプロシージャを動かすようにコードを書く。
3.ブックを保存する。
4.メインプロシージャを動かす

たぶん、こんな感じでできたはず。
745: 2019/03/22(金)19:35 ID:DJ7JSKt5(3/4) AAS
>>744
ありがとうございます。
しかし、もし50個URLがあれば50個新しくExcel自体を起動しないといけないのですか?
そんなことしたら激重になってしまうように思うのですが。
746
(1): 2019/03/22(金)19:38 ID:ls5du2vw(1/2) AAS
複数のInternetExplorer.Applicationのインスタンス立ち上げれば行けんじゃないか
747
(1): 2019/03/22(金)19:57 ID:HaipTOms(2/7) AAS
>>746
今それができないって会話をしてたところだけど理解してる?
748
(1): 2019/03/22(金)20:04 ID:ls5du2vw(2/2) AAS
>>747
どこでそれが出来ないって話をしてる?
749: 2019/03/22(金)20:19 ID:HaipTOms(3/7) AAS
>>748
>>742
750
(1): 2019/03/22(金)20:49 ID:n3e2TSgf(1) AAS
>>741
フレームを50個並べたページのHTMLをローカルで作って開けば一気に読み込んでくれる
751
(3): 2019/03/22(金)21:25 ID:uvzdlIQp(1) AAS
なんか勘違いしてるやつがいるけど、VBAがマルチスレッドじゃないことと、IEを複数開くのはまったく別のことだからな

IEはOfficeとはまったく無関係の独立したプロセスだから、いくつでもインスタンス化できるし同時にネットアクセスできる
IEオブジェクトを配列で作っといて、ページの読み込み完了を待たずにどんどん開いてけばいいんだよ
752
(2): 2019/03/22(金)22:10 ID:HaipTOms(4/7) AAS
>>751
そのプロセスを制御するVBAがシングルスレッドだろ
753
(1): 2019/03/22(金)22:13 ID:HaipTOms(5/7) AAS
>>751
あ、開けば終わりと勘違いしてる?
754: 2019/03/22(金)22:13 ID:LAgBLCyu(1) AAS
IEにタブをいくつも開いてもらって、みんな読み込んだところでおもむろに順番に処理すればいいってことだろ。
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って不便だよね
1-
あと 230 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.027s