こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

エクセルVBAでメモリ解放するには?

初心者な質問でもうしわけないのですが、教えてください。私は現在エクセルVBAを利用してウェヴマクロのimacrosの制御を行いサイトからリストの抽出を行っています。その際、変数の定義がうまくできなかったため、クリップボードに必要な情報をコピーし、エクセルに張り付けるという流れで作業を行っています。そして、このループ作業を約1000回行いたいのですが、大体50回目で止まります。止まっている際にエラーボックスが出て、「out of memory」となっています。クリップボード多用によるメモリの使い切りだと思います。そこで、クリップボードの内容を一度クリアすることを行いたいのですが、VBAのソースコードがわかりません、どなたかご存知であればご教授していただきたいと思います。
尚、VBAのソースコードは以下の通り。

Sub 抽出マクロ()

Dim iim1, iret, row, counter, column, url
Application.ScreenUpdating = False

Set iim1 = CreateObject("imacros")
iret = iim1.iimInit
iret = iim1.iimDisplay("Submitting Data from Excel")

row = 2
counter = 1


Range("I1").Copy


Do

If counter = 2500 Then
Application.ScreenUpdating = True
Exit Sub
End If

iret = iim1.iimPlay("titlename1.iim")
Cells(row, 1).Value = Replace(iim1.iimGetLastExtract(), "[EXTRACT]", "")


iret = iim1.iimPlay("newprice.iim")
Cells(row, 2).Value = Replace(iim1.iimGetLastExtract(), "[EXTRACT]", "")


iret = iim1.iimPlay("ISBN10.iim")
Cells(row, 3).Value = Replace(iim1.iimGetLastExtract(), "[EXTRACT]", "")


iret = iim1.iimPlay("ISBN13.iim")
Cells(row, 4).Value = Replace(iim1.iimGetLastExtract(), "[EXTRACT]", "")


iret = iim1.iimPlay("ASIN.iim")
Cells(row, 5).Value = Replace(iim1.iimGetLastExtract(), "[EXTRACT]", "")

row = row + 1

 counter = counter + 1
 
Loop

End Sub

***追伸***
ちなみにループの中に同じソースが12個続きます。そのため50回程度ループしているだけで約600回の抽出が行われます。
お手数ですが、ご教授していただけると助かります。

投稿日時 - 2011-09-26 19:27:21

QNo.7036070

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

失礼な表現、不適当な記載あったらご容赦ください。

先ず、質問するカテゴリーですが、
デジタルライフ>ソフトウェア>MS Office または同、Office系ソフトで質問した方が良いかと存じます。
そちらの方が具体的なコーディングを教えてくれると思われます。

Windows95/98の走りの時に主にやってましたが、VBAは、最近いじっていないので忘れましたが、
EXCELのVBAに限ってはマクロの登録開始し、コピーし、EXCELに貼り付け、EXCELのクリップボードをクリアするまでをマクロで登録します。
EXCELのバージョンが解りませんが、少なくとも2007にはクリア機能があります。
そしてそのコーディングをVBAで覘いて必要なコーディングを特定してはいかがですか?

これに限らず、やりたいことがあってどうしてもステートメントやコマンドが解らないときは、マニュアル(手作業)で出来る作業はマクロ登録で実際にやることで大抵のコーディングは解ります。
そのコーディングから不要部分を削除すれば良いかと思います、

マクロ登録開始→「やらせたい作業をマニュアル(手作業)でやってみる」→マクロ登録を終了
その後、そのマクロのコーディングを修正したり、部分的にコピーして自分のやりたいVBAプログラムを作っていました。

その他の注意として、コーディングの追加箇所ですがコピーに行く前が適当かと思います。
エラー処理などでは対応しない方が良いかと思います。

経験上、エラー処理はトラブルの要因になることが多いようです。最悪の時にだけ使う方がいいかと思います。

以上

投稿日時 - 2011-09-29 21:07:03

あなたにオススメの質問