マクロを使ってワークシートを別ブックにコピーすると、「エラー’9’インデックスが有効範囲にありません」や「エラー’1004’このシートをコピーできませんでした」などのエラーが発生してしまうことがありますが、なぜなのでしょうか?
今回は、ワークシートを別ブックにコピーするとエラーになってしまうときの原因・対処方法について徹底的に説明していきます。
シートを別ブックにコピーするとエラーになるときの対処方法
エラーになる原因・対処方法
ワークシートを別ブックにコピーする場合にエラーになってしまう原因は以下のことが考えられます。
- コピー元やコピー先が上手く設定されていない
- シートコピー数が多い
それぞれについて詳しく解説します。
1.コピー元やコピー先が上手く設定されていない
これは非常によくあるミスです。
コピー元のシートをコピーしたつもりが、じつはコピー先(貼り付け先)のブックのシートがコピー元になってしまっている
ということがよくあります。
その原因は、「Select」や「Activate」で参照していると、いつの間にか操作対象が入れ替わってしまうことがあるからです。
例えば、、コピー先(貼り付け先)ブックを「Open」すると、自動的に「Open」したブックがアクティブになってしまいます。
対処方法としては、
- 参照するブックやシートを、「Select」や「Activate」で参照しない
- Cells() や Range() というように、ブックやシートの参照を省略しない。
ということが挙げられます。
2.シートコピー数が多い
シートのコピーを一度に約何百回も行うと、連続コピーでエクセルがビジーになり、処理が追いつかなくなり、エラーになる確率が高くなります。
安全に一度にコピーできる制限ラインは、シートのデータ量によりますが、およそ30回と言われています。
対処方法としては、処理の途中でウェイトすることが挙げられます。
具体的な方法は、以下の手順になります。
(1)標準モジュールの先頭に以下の API 関数を記述します。
Declare Sub Sleep Lib “kernel32” (ByVal dwMilliseconds As Long)
(2)ウェイトさせるコードを追加記述します。
Sleep 500
DoEvents
「Sleep 500」は500ミリ秒ウェイトさせるもので、「DoEvents」は制御を一瞬OSに渡すことで処理を中断させる(休ませる)ことができます。
参考:Excel VBA入門 その87:Workbook の Closeエラー対処方法
コメント
[…] […]