VBA|シートを別ブックにコピーするとエラーになるときの対処方法

エクセルVBA VBAでワークシートの操作



マクロを使ってワークシートを別ブックにコピーすると、「エラー’9’インデックスが有効範囲にありません」「エラー’1004’このシートをコピーできませんでした」などのエラーが発生してしまうことがありますが、なぜなのでしょうか?

今回は、ワークシートを別ブックにコピーするとエラーになってしまうときの原因・対処方法について徹底的に説明していきます。



シートを別ブックにコピーするとエラーになるときの対処方法

引用:teratail

エラーになる原因・対処方法

ワークシートを別ブックにコピーする場合にエラーになってしまう原因は以下のことが考えられます。

  1. コピー元やコピー先が上手く設定されていない
  2. シートコピー数が多い

それぞれについて詳しく解説します。

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エラー対処方法

コメント

  1. […] […]

タイトルとURLをコピーしました