Excel2007のVBAを含んだファイルを開いた時、稀に表題のエラーが発生します。
発生頻度は、毎日十数回程度のアクセスで週に一度程度です。
おおよそ60~80回に一度のペースですが、発生した時の状況に共通性は見いだせません。
ただし、後に示します「行のコピー&ペーストと削除」の構文を除外するとエラーは発生しなくなりますので、そこが原因であると考えています。
このエラーが発生するとExcelがフリーズするため、タスクマネージャによる強制終了が必要です。
大変煩わしいので、回避策等ありましたらご教示いただきたく、よろしくお願いいたします。
動作は、ファイルを開いた時にWorkbook_Open()において、特定の文字列が含まれる行をアクティブシートに貼付け、元のシートにあるデーターは消去します。
(つまり、シート間のデーター移動を行っています)
移動量は、最大で250行×20列程度です。
フィルターその他でも似たような結果は得られるのですが、このケースではどうしても選択的なデーター移動が必要なので、このような形になってしまいました。
結果として、このファイル(ブック)の異なるシートに同じデーターが重複して存在しなければ良いので、下に示す手順・コードにこだわってはいません。他にアイデアが浮かばなかったのでこのような記述になっています。
プログラムの手順は、
・変数TNameへ移動対象となる文字列を代入する。(実際には特定のセルから値を取得)
・シート【ORG】のデーターをスキャン。
・2列目の値にTNameが含まれていたらその行をコピー。
・アクティブシートの「EndRow」で示される行(実際には先頭セルを指定)へペースト。
・コピー元の行を削除。
※カット&ペーストの方が簡単なのですが、実際に動作させるとカットされない(!)ので上記の手順を踏んでいます。
実際のコードは以下の様になります。(抜粋)
TName = "xxxx" 'シートの2行目に記入されている文字(の一部)が代入されます。
With Worksheets("ORG")
EndRow = 1
RRow = 1
While .Cells(RRow, 1) <> "" 'シート【ORG】の1列目データーが空白になるまでスキャン。
If InStr(TName, .Cells(RRow, 2)) Then '2列目の値にTNameの文字列が含まれているか。
.Rows(RRow).Copy _ '行をコピーし、アクティブシートへペースト。
Destination:=Cells(EndRow, 1)
' ↑ (ペースト先をRowsで指定するとエラーとなるので、先頭セルを指定)
.Rows(RRow).Delete Shift:=xlUp '対象行を削除。
RRow = RRow - 1 '行を削除したのでスキャン対象行を一つ上に戻す。
EndRow = EndRow + 1
End If
RRow = RRow + 1
Wend
End With
原因をご存知の方、また回避策をご存知の方がいらっしゃいましたら、是非ご教示ください。
よろしくお願いいたします。
なお、Webにて調べましたところExcel2000においてはコピー(カット)&ペーストを多量に行うと発生しやすいとの情報がありました。
[http://support.microsoft.com/default.aspx?scid=kb;ja;JP414107&wa=wsignin1.0]
しかし、2007では報告されていないようです。
現象は酷似していますが発生条件も大きく異なりますので、直接は該当しないと考えております。