プロが教える店舗&オフィスのセキュリティ対策術

以下のようなプログラムで、ExcelVBAで作成しております、Webの情報を取得しております。
strGetUrl のところのサイトによっては、メモリが解放できず困っています。
Whileで繰り返すほど、メモリを消費して解放されません。メモリいっぱいになれば解放してくれるのかと思いましたが、止まってしまいました。2回目はOSを壊して再インストールしてもらいました(VPS上で)。
困っております。オブジェクトも”Set xxxx = Nothing”で解放しているつもりです。
考えられる理由をご教授頂けると幸いです。

環境は
OSはWindowsServer2008R2
IEはIE8
でVPSなので変更不可と言われました。
ちなみに、Windows8.1の環境ではメモリが溜まっていくことはなかったです。
何か良い方法はありますでしょうか?
また、別のWebアクセス方法はありますでしょうか?
IE = CreateObject("InternetExplorer.Application")は同じ結果でした。

以下のプログラムでサイトにもよりますが、発生しています。
***********************************
Option Explicit

Sub testHtml()

Dim doc As Object, objTag1 As Object, objTag2 As Object
Dim oHttp As Object
Dim strUrl As String, strGetUrl As String
Dim rowIndex As Integer

' 基本URL設定
strGetUrl = "http://www.xxxx.xxx.com"

rowIndex = 1

'1列目が1行づつ進めてが空になったら終了
While Cells(rowIndex, 1).Value <> ""

Set oHttp = CreateObject("MSXML2.XMLHTTP")
Set doc = CreateObject("htmlfile")
' *************** HTTPヘッダの作成し、送信してデータを取得 *****************
With oHttp

.Open "GET", strGetUrl, False
.Send
' 受信したデータをオブジェクトに書き込みます。
doc.Write .responseText

End With

' *************** 受信データを解析し、H2データ取得に分割 *****************
For Each objTag1 In doc.body.getElementsByTagName("H2")
If objTag1.className = "resultCount" Then
Cells(rowIndex, 2).Value = objTag1.innerText
End If
Next

' Objectの解放
Set objTag1 = Nothing
Set objTag2 = Nothing
Set doc = Nothing
Set oHttp = Nothing

rowIndex = rowIndex + 1
Wend

End Sub

A 回答 (1件)

対策としては、CreateObjectを繰り返さない。


CreateObjectで作成したオブジェクトを使いまわす。

http://www.ken3.org/guchi/backno/guchi205.html

この回答への補足

連絡ありがとうございました。ただ、解決しなかったので、OSをWindowsServer2012にバージョンアップすれば問題は発生しませんでした。参考まで追記しておきます。

補足日時:2014/02/23 20:20
    • good
    • 1
この回答へのお礼

ありがとうございます。
良いアドバイスだと思いましたが、一応、試してみましたが、うまくいきませんでした。
もう少し調べてみます。
情報ありがとうございました。

お礼日時:2014/02/21 01:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています