
以下のようなプログラムで、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
No.1ベストアンサー
- 回答日時:
対策としては、CreateObjectを繰り返さない。
CreateObjectで作成したオブジェクトを使いまわす。
http://www.ken3.org/guchi/backno/guchi205.html
この回答への補足
連絡ありがとうございました。ただ、解決しなかったので、OSをWindowsServer2012にバージョンアップすれば問題は発生しませんでした。参考まで追記しておきます。
補足日時:2014/02/23 20:20ありがとうございます。
良いアドバイスだと思いましたが、一応、試してみましたが、うまくいきませんでした。
もう少し調べてみます。
情報ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルマッピング関数で失敗
-
移動可能メモリ
-
AIXでのプロセス使用メモリの最...
-
ちなみに、for (i = 0; str[i] ...
-
マクロのスピードがダウンする??
-
メモリが不足しています(VBA)
-
C言語で、メモリを解放しないで...
-
ReadEventLogについて
-
シェル(perl)が使用するメモリ...
-
「ヒープサイズの設定」て何?
-
Connection、ResultSet、、Stat...
-
「memcpy」と「strcpy」について
-
メモリ不足
-
VBAの配列サイズとメモリに関して
-
Macターミナルで実行中のプログ...
-
powershell を使いカレントディ...
-
TCP/IP通信時のサーバーからの受信
-
Windows上で、シグナル(SIGTERM...
-
プロセスIDの取得方法について
-
Excel(VBA)でSetTimer関数を使...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メモリが不足しています(VBA)
-
VBAの配列サイズとメモリに関して
-
C言語で、メモリを解放しないで...
-
エクセルVBA 大容量CSVファイル...
-
メモリのセグメント違反の解決...
-
エクセルのメモリ使用状況/Appl...
-
「ヒープサイズの設定」て何?
-
【C言語】再帰が時間がかかる...
-
バッチファイルでの実行EXEのメ...
-
ReadEventLogについて
-
メモリを解放しないとどうなる?
-
LoadLibraryしたらFreeLibrary
-
C言語における再帰呼び出しの...
-
EXCEL-VBAにてADOのレコードセ...
-
メモリ不足
-
クリスタルレポートでメモリ不...
-
Bitmapを重ね合わせる方法
-
これて逆じゃないですか?
-
ルネサスマイコン(R8C) ビルド...
-
closeとメモリの開放について
おすすめ情報