- 締切済み
エクセル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回の抽出が行われます。 お手数ですが、ご教授していただけると助かります。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Uncle_John
- ベストアンサー率57% (455/791)
失礼な表現、不適当な記載あったらご容赦ください。 先ず、質問するカテゴリーですが、 デジタルライフ>ソフトウェア>MS Office または同、Office系ソフトで質問した方が良いかと存じます。 そちらの方が具体的なコーディングを教えてくれると思われます。 Windows95/98の走りの時に主にやってましたが、VBAは、最近いじっていないので忘れましたが、 EXCELのVBAに限ってはマクロの登録開始し、コピーし、EXCELに貼り付け、EXCELのクリップボードをクリアするまでをマクロで登録します。 EXCELのバージョンが解りませんが、少なくとも2007にはクリア機能があります。 そしてそのコーディングをVBAで覘いて必要なコーディングを特定してはいかがですか? これに限らず、やりたいことがあってどうしてもステートメントやコマンドが解らないときは、マニュアル(手作業)で出来る作業はマクロ登録で実際にやることで大抵のコーディングは解ります。 そのコーディングから不要部分を削除すれば良いかと思います、 マクロ登録開始→「やらせたい作業をマニュアル(手作業)でやってみる」→マクロ登録を終了 その後、そのマクロのコーディングを修正したり、部分的にコピーして自分のやりたいVBAプログラムを作っていました。 その他の注意として、コーディングの追加箇所ですがコピーに行く前が適当かと思います。 エラー処理などでは対応しない方が良いかと思います。 経験上、エラー処理はトラブルの要因になることが多いようです。最悪の時にだけ使う方がいいかと思います。 以上