Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1565 / 2272 ツリー ←次へ | 前へ→

【6477】IEオブジェクトでWebページ取得で不満 bossa777 05/10/14(金) 1:12 質問[未読]
【6478】Re:IEオブジェクトでWebページ取得で不満 かみちゃん 05/10/14(金) 2:12 発言[未読]
【6481】Re:IEオブジェクトでWebページ取得で不満 小僧 05/10/14(金) 8:59 発言[未読]
【6501】Re:IEオブジェクトでWebページ取得で不満 bossa777 05/10/16(日) 3:43 お礼[未読]

【6477】IEオブジェクトでWebページ取得で不満
質問  bossa777  - 05/10/14(金) 1:12 -

引用なし
パスワード
   はじめまして。
Webサイトを参考にし、複数のURL(100件程度)へ次々にジャンプしてHTMLを解析
し、抜き取ったデータをテーブルに登録するACCESSプログラムを作りました。
しかし・・・処理が遅いです。
処理が遅いのはしょうがないとして、これを実行中に他のウインドウで
作業していると、フォーカスをACCESSにとられてしまい作業できません。
この問題を解決する方法を教えていただけないでしょうか。
HTMLを取得するコードは下記の通りです。宜しくお願いします。

Declare Function GetInputState Lib "USER32" () As Long

Public Function GetHTML(ByVal strURL As String, ByRef varHTML As Variant) _
As Boolean
 
 Dim objIE As Object ' IEオブジェクト参照用
 Dim datTimeLimit As Date
 Dim tmpHTML As String

 GetHTML = False
 varHTML = ""
 ' インターネットエクスプローラーのオブジェクトを作る
 Set objIE = CreateObject("InternetExplorer.application")
 objIE.Visible = False

 ' 指定したURLに飛ぶ
 objIE.Navigate strURL

 ' 完了するまで待ち、n秒後にエラーを判断する
 datTimeLimit = DateAdd("s", cTimeOut, Now()) ' 現在からn秒後を計算
 Do While objIE.ReadyState <> 4
  If GetInputState() Then DoEvents
  If datTimeLimit < Now() Then  'n秒経過したか?
   GoTo EXIT_GetHTML
  End If
 Loop

 ' HTMLソースを取出す
 tmpHTML = objIE.Document.body.innerHTML '変数に代入
' 改行コードで分割
 varHTML = Split(tmpHTML, vbCrLf)
 GetHTML = True

EXIT_GetHTML:

 Set objIE = Nothing
 Exit Function

End Function

【6478】Re:IEオブジェクトでWebページ取得で不満
発言  かみちゃん  - 05/10/14(金) 2:12 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>Webサイトを参考にし、複数のURL(100件程度)へ次々にジャンプしてHTMLを解析
>し、抜き取ったデータをテーブルに登録するACCESSプログラムを作りました。
>しかし・・・処理が遅いです。

検証もしていないので、1つの案ですが、WebBrowserコンポーネントを使うことも
できるかと思います。
(私はWebBrowserコンポーネントでデータを取得したことがあります。)
具体的には、下記URLを参照してみてください。
http://www.tsware.jp/tips/tips_207.htm
http://www.tsware.jp/tips/tips_267.htm

【6481】Re:IEオブジェクトでWebページ取得で不満
発言  小僧  - 05/10/14(金) 8:59 -

引用なし
パスワード
   ▼bossa777 さん、 かみちゃん さん:
おはようございます。

>HTMLを解析

ここが何をされているかがご提示されていませんが、
文字列操作しかされていないのであれば、こんな方法も可能です。

Sub PrintHttpDocSimply()
Dim oHttp As Object
Set oHttp = CreateObject("MSXML2.XMLHTTP")
oHttp.Open "GET", _
"http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=6477;id=access", False
oHttp.Send
Debug.Print oHttp.responseText
End Sub

元ネタは YU-TANG さんのサイトに載っておりますので
参考にされてみてはいかがでしょうか?

http://www.f3.dion.ne.jp/~element/msaccess/AcTipsVbaXMLHTTP.html

【6501】Re:IEオブジェクトでWebページ取得で不満
お礼  bossa777  - 05/10/16(日) 3:43 -

引用なし
パスワード
   かみちゃん さん、小僧 さん:
ご教示有難うございました。
まさに求めていたのはこれらの情報でした!

XMLHTTPの方法でやってみましたが、処理速度は1.5倍くらい、
それよりうれしいことに他のウインドウで作業していても
フォーカスをとられることがありません!

この度は有難うございました。感謝いたします。

1565 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078230
(SS)C-BOARD v3.8 is Free